상세 컨텐츠

본문 제목

CPU1와 CM간 IPC 통신 - (1) 프로젝트 생성

TMS320F28388D 공부

by Zin9 2023. 8. 12. 18:03

본문

728x90

 

 

CPU1와 CM간 IPC 통신 - (2) 코드 설명 및 디버깅

IPC 활용 -(1) CPU1와 CM 통신 사용하고자 하는 DSP는 TI사의 TMS320F29388D이다. 이 칩은 2개의 C28x 코어 2개와 CM 코어 1개로 구성되어 있다. C28x 코어는 듀얼코어로 제어 루프를 돌리는 용도로 사용할 것이

zin9.tistory.com

 

 

 

사용하고자 하는 DSP는 TI사의 TMS320F29388D이다.

이 칩은 2개의 C28x 코어 2개와 CM 코어 1개로 구성되어 있다.

C28x 코어는 듀얼코어로 제어 루프를 돌리는 용도로 사용할 것이며, CM 코어는 EtherCAT, Ethernet 등 통신 용도로 사용할 것이다.

C28x 코어는 편의상 CPU1, CPU2로 부른다.

이 칩의 목적은 CPUx에서 제어 루프를 돌리면서 데이터를 CM으로 전송한 뒤, CM이 상위제어기와 데이터를 교환하는 것이다.

따라서, CPU1와 CM 간 데이터 교환을 어떻게 하는지 실습해보고자 한다.

디버깅 모드에 진입해서 실제 메모리 주소도 확인해보도록 한다.

 

프로젝트를 생성해보자.

c2000ware를 설치했다면, 다음 경로를 보면 된다.

projectspec 파일을 통해 만들 건데 그림 1을 참고한다.

 

<그림 1. projectspec 파일 추가>

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 함수가 포함되어 있다.

 

<그림 2. 프로젝트 구성>

 

cm_common_config_c28x.c 파일을 열어보면, 전처리코드와 함께 비활성화된 코드가 많이 있다.

사용하지 않으므로 전부 삭제한다.

맨 아래에 코드를 첨부했으니 첨부파일을 그대로 복사해서 사용해도 좋다.

 

<그림 3. cm_common_config_c28x.c의 전처리 코드>

 

 

자, 이제 코드를 설명한다.

cm_common_config_c28x.c를 보자.

 

<그림 4. RAM 영역 선언>

 

마지막 줄의 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으로 할당된다는 것을 의미한다.

 

<그림 5. CPU1 RAM의 cmd 파일 1>
<그림 6. CPU1 RAM의 cmd 파일 2>

 

CM 또한 위와 같이 해석하면 된다.

다음 포스팅에서 코드 흐름을 보고, 디버깅모드에서 확인해본다.

 

 

cm_common_config_c28x.c
0.00MB
empty_driverlib_main_cm.c
0.00MB

728x90

관련글 더보기