TMS320C6678 이해하기 & 프로젝트 생성하기

코어가 8개 짜리 DSP칩을 사용하면서 기본 개념이 많이 필요하다. 관련 자료는 너무 많고 해당 교육자료는 더더욱 없다. 1. TMS320C6678 2. TMS320C6678 프로젝트 생성과 기본설명을 다루겠다.

TMS320C6678

  • C의 의미는 CMOS를 의미하며 / CMOS란. 채널이 다른 모스 트랜지스터를 짜맞추어 논리 회로를 구성하는 방식 이라고 사전에 나온다.
  • 4way SRIO 
  • 높은 소비전력이 필요하며 히트싱크와 팬이 동작한다.

키스톤 구조

TMS320C6678 chip memory structure
  • 64비트 DDR3, EMIF (DDR : Dual Data Rate)
  • EMIF : External Memory Interface (DSP와 FPGA 간의 통신에 사용)
  • L1,L2,SRAM,MSMC 메모리 사용 가능
  • MSMC : Multi-core shared memory controller 의미한다.
  • MSMC는 shared -chip SRAM 제공

부트롬(Boot Rom)

  • 부트롬 동작은 Teranet bus를 통해서 접근할 수 있다.
  • 부트롬이 동작하는 주소는 0x20B00000 ~ 0x20B1FFFF (128kB) 
  • DSP는 여러가지 부트 모드를 지원한다.
  • 스위치 모드에 따라서 I2C, PCIe, SRIO, Nand 부트모드를 지원한다.
Bootloader mode

부팅 레지스터(Boot Register)

  • 밑에 이미지와 같이 레지스터 값을 읽으면 Corepac boot 상태를 확인할 수 있다.
  • 0번 : CorePac0 Boot Status
  • 1번 : CorePac1 Boot Status
  • 2번 : CorePac2 Boot Status
  • 3번 : CorePac3 Boot Status
  • 4번 : CorePac4 Boot Status
  • 5번 : CorePac5 Boot Status
  • 6번 : CorePac6 Boot Status
  • 7번 : CorePac7 Boot Status

프로젝트 생성하기

  • Project Name : hihiood
  • Family : C6000
  • Varient : TMS320C6678
  • Empty Project -> Empty Poject(with main.c) 클릭한다.

Main함수 코드 작성

  • Chip 버전이 6657 또는 6655 면 Kick 함수를 써서 부팅을 강제로 시켜야되지만 6678 버전의 경우 Kick함수를 따로 사용하지 않아도 자동설정 된다.
#define HWREG(x)    *(volatile unsigned int *)(x)


#define GPIO_REG_BASE      0x02320000
#define GPIO_DIR           0x10
#define GPIO_OUTDATA       0x14



int main(void) {
	
    HWREG(GPIO_REG_BASE + GPIO_DIR)&= ~((1<<15) |
                                        (1<<14) |
                                        (1<<4));

    HWREG(GPIO_REG_BASE + GPIO_OUTDATA) |= ((1<<15) |
                                            (1<<14));
    HWREG(GPIO_REG_BASE + GPIO_OUTDATA) &= ~(1<<4);

    HWREG(GPIO_REG_BASE + GPIO_OUTDATA) &= ~((1<<15) |
                                            (1<<14));


    HWREG(GPIO_REG_BASE + GPIO_OUTDATA) |= (1<<4);


	return 0;
}

CMD 파일 수정하기

  • TMS320C6678의 경우 Sysbios 환경에서 세팅하거나 C코드를 사용하는 두가지 방법이 있다.
  • C코드를 활용할 경우 Pin Mapping에 필요한 CMD 파일을 수정해야된다.
-c
-heap  0x2000
-stack 0x2000

/* Memory Map 1 - the default */
MEMORY
{

 	MSMCSRAM (RWX) : org = 0x0c000000, len = 0x00400000
}

SECTIONS
{
	.text >MSMCSRAM
	.cinit >MSMCSRAM
	.const >MSMCSRAM
	.switch >MSMCSRAM
	.stack >MSMCSRAM
	.fardata >MSMCSRAM
	.cio >MSMCSRAM
}
5X

Leave a Comment