코어가 8개 짜리 DSP칩을 사용하면서 기본 개념이 많이 필요하다. 관련 자료는 너무 많고 해당 교육자료는 더더욱 없다. 1. TMS320C6678 2. TMS320C6678 프로젝트 생성과 기본설명을 다루겠다.
TMS320C6678
- C의 의미는 CMOS를 의미하며 / CMOS란. 채널이 다른 모스 트랜지스터를 짜맞추어 논리 회로를 구성하는 방식 이라고 사전에 나온다.
- 4way SRIO
- 높은 소비전력이 필요하며 히트싱크와 팬이 동작한다.
키스톤 구조
- 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 부트모드를 지원한다.
부팅 레지스터(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