사용하고자 하는 DSP는 TI사의 TMS320F29388D이다.
이 칩은 2개의 C28x 코어 2개와 CM 코어 1개로 구성되어 있다.
C28x 코어는 듀얼코어로 제어 루프를 돌리는 용도로 사용할 것이며, CM 코어는 EtherCAT, Ethernet 등 통신 용도로 사용할 것이다.
C28x 코어는 편의상 CPU1, CPU2로 부른다.
이 칩의 목적은 CPUx에서 제어 루프를 돌리면서 데이터를 CM으로 전송한 뒤, CM이 상위제어기와 데이터를 교환하는 것이다.
따라서, CPU1와 CM 간 데이터 교환을 어떻게 하는지 실습해보고자 한다.
디버깅 모드에 진입해서 실제 메모리 주소도 확인해보도록 한다.
프로젝트를 생성해보자.
c2000ware를 설치했다면, 다음 경로를 보면 된다.
projectspec 파일을 통해 만들 건데 그림 1을 참고한다.
c2000ware에는 cgt버전이 다를 수 있으므로, 본인의 PC 환경에 맞게끔 수정해놓는다.
(자세한 설명은 생략한다.)
projectspec 파일은 c2000ware 폴더 내에서 필요한 파일을 프로젝트에 자동으로 추가해준다.
필자는 빈 프로젝트를 생성했다. 어차피 IPC 라이브러리는 다 포함되어 있다.
경로 → C:\ti\c2000\C2000Ware_5_00_00_00\driverlib\f2838x\examples\cm\empty_projects\CCS
projectspec 파일을 추가하면 그림 2와 같이 프로젝트 파일이 만들어진다.
이 중에서 네모 상자로 표시된 2개의 파일만 사용한다.
2개의 파일에 main 함수가 포함되어 있다.
cm_common_config_c28x.c 파일을 열어보면, 전처리코드와 함께 비활성화된 코드가 많이 있다.
사용하지 않으므로 전부 삭제한다.
맨 아래에 코드를 첨부했으니 첨부파일을 그대로 복사해서 사용해도 좋다.
자, 이제 코드를 설명한다.
cm_common_config_c28x.c를 보자.
마지막 줄의 MSGRAM_CPU_TO_CM와 MSGRAM_CM_TO_CPU가 어디서 나온 것인지 확인해보자.
2838x_RAM_lnk_cpu1.cmd을 열어보자.
그림 4의 72~73줄에서 선언한 구조체 변수를 그림 5의 92줄에 선언되어 있는 변수(?)와 일치시킨다고 생각하면 쉽다.
예를 들어, CPUTOCMRAM을 보면 그림 6에서 주소값이 0x039000으로 되어 있다.
즉, 그림 4의 IPC_TxToCM은 RAM 주소 0x039000으로 할당된다는 것을 의미한다.
CM 또한 위와 같이 해석하면 된다.
다음 포스팅에서 코드 흐름을 보고, 디버깅모드에서 확인해본다.
[TMS320F28388D] SYS/BIOS 4부 - Timer 생성하기 (2) | 2023.08.19 |
---|---|
[TMS320F28388D] SYS/BIOS 3부 - Swi 생성하기 (0) | 2023.08.19 |
[TMS320F28388D] SYS/BIOS 2부 - Task 생성하기 (0) | 2023.08.18 |
[TMS320F28388D] SYS/BIOS 1부 - 인트로, 프로젝트 생성하기 (0) | 2023.08.18 |
CPU1와 CM간 IPC 통신 - (2) 코드 설명 및 디버깅 (2) | 2023.08.12 |