그림 1에 코드를 나타냈고, 순서는 다음과 같다.
① → ② → ③ → ④ → ⑤ → ② → ③ → ④ → ⑤ → ···
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도 자동으로 디버깅 모드로 진입 가능하다.
그림 5를 보면, CPU1에서 그림 1의 ②의 중간에서 브레이크포인트를 걸어놓았다.
IPC_TxToCM에 값을 할당하면, IPC 통신에 사용되는 RAM 영역에 자동으로 값이 할당된다.
IPC_TxToCM는 RAM을 사용한다고 보면 된다.
앞서서 #pragma로 설정했기 때문이다.
이제 CM으로 넘어가보자.
CPU1의 RAM 영역 0x00039088에 매칭되는 CM의 RAM 영역 0x20080110을 보자.
CPU1에서 할당한 값이 CM의 RAM 영역에 적용됨을 볼 수 있다.
그림 5의 111줄이 실행되면, 그림 6의 103의 if 문 안으로 진입이 가능하다.
이후의 과정은 직접 해보면서 확인해보길 바란다.
[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 통신 - (1) 프로젝트 생성 (0) | 2023.08.12 |