상세 컨텐츠

본문 제목

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

TMS320F28388D 공부

by Zin9 2023. 8. 12. 18:36

본문

728x90

 

 

IPC 활용 -(1) CPU1와 CM 통신

사용하고자 하는 DSP는 TI사의 TMS320F29388D이다. 이 칩은 2개의 C28x 코어 2개와 CM 코어 1개로 구성되어 있다. C28x 코어는 듀얼코어로 제어 루프를 돌리는 용도로 사용할 것이며, CM 코어는 EtherCAT, Ethern

zin9.tistory.com

 

 

그림 1에 코드를 나타냈고, 순서는 다음과 같다.

① → ②                ···

 

<그림 1. CPU1와 CM 코드>

 

IPC_clearFlagLtoR() 함수를 통해 모든 플래그를 초기화 시켜준다.

플래그는 0부터 31까지 있다.

그런 다음, 싱크를 맞춰주는 IPC_sync() 함수를 실행한다.

이 때, 두 코어에서 IPC_sync() 함수가 전부 실행되어야 다음 코드로 진행한다.

 

초기 실행을 위해 CM의 ①에서 플래그를 설정해준다.

②에서는, IPC_FLAG0을 읽어서 IPC_TxToCM에 값을 할당한다.

할당하고 나면 CM에서도 그 값을 곧장 읽을 수 있다(이는 나중에 디버깅 모드에서 확인한다).

하지만, 플래그가 set이 되기 전까지는 읽을 수 없도록 ③에서 설정해놓았다.

 

이는, CPU1에서 모든 데이터가 전부 RAM에 입력되고 나서, CM에서 그 값을 읽게 하기 위함이다.

 

③에서 CPU1의 데이터를 받아 들인 후, gFlag를 통해 ④가 실행되도록 했다.

④에서는 CM에서 CPU1로 데이터를 전송한다.

그리고 ⑤를 보면, CPU1에서 CM으로부터 전달받은 데이터를 read_data_CPU1에 복사한다.

 

 

 

자, 디버깅 모드에 진입해보자.

필자는 CPU1에서 디버깅 모드에 진입하면 CM도 같이 디버깅 모드에 진입하도록 설정한다.

그림 2~4를 보자.

특히, 그림 4와 같이 CM을 설정하면, CPU1에서 디버깅 모드에 진입했을 때, CM도 자동으로 디버깅 모드로 진입 가능하다.

 

<그림 2. 디버깅 모드 설정 1>
<그림 3. 디버깅 모드 설정 2>
<그림 4. 디버깅 모드 설정 3>

 

그림 5를 보면, CPU1에서 그림 1의 ②의 중간에서 브레이크포인트를 걸어놓았다.

IPC_TxToCM에 값을 할당하면, IPC 통신에 사용되는 RAM 영역에 자동으로 값이 할당된다.

IPC_TxToCM는 RAM을 사용한다고 보면 된다.

앞서서 #pragma로 설정했기 때문이다.

 

<그림 5. CPU1의 디버깅 모드>

 

 

이제 CM으로 넘어가보자.

CPU1의 RAM 영역 0x00039088에 매칭되는 CM의 RAM 영역 0x20080110을 보자.

CPU1에서 할당한 값이 CM의 RAM 영역에 적용됨을 볼 수 있다.

그림 5의 111줄이 실행되면, 그림 6의 103의 if 문 안으로 진입이 가능하다.

이후의 과정은 직접 해보면서 확인해보길 바란다.

 

<그림 6. CPU1의 디버깅 모드>

 

 

728x90

관련글 더보기