본문 바로가기
임베디드 쌩초보 공부/TI - C2000 MCU

C2000 multicore 개요2 IPC

by 존버매니아.임베디드 개발자 2023. 6. 19.
반응형

https://software-dl.ti.com/C2000/docs/C2000_Multicore_Development_User_Guide/ipc_communication.html

굳이 내 설명안봐도 위 링크에 잘쓰여있음


IPC는 코어 간 통신을 위해 존재하는 별도의 패리펄럴인데 Inter Processor Communication의 약자다.

CPU간에 서로 정보전달을 위한 플래그 레지스터가 위와 같이 5개 존재함.
이 레지스터는 CPU마다 별도로 존재함.
각 레지스터는 32Bit니까 각각의 레지스터 내부에는 32개의 플래그가 존재함.

이 플래그들은 유저가 적절히 활용하면되는데 CPU1이 CPU2에게 정보전달하는 예시를 생각해보자.

CPU1이 CPU1의 IPCSET 레지스터 플래그를 Set하면 , CPU2의 IPCSTS 플래그가 Set됨.

그니까 CPU2가 CPU1로 부터 어떤 정보를 수신받고 싶으면 본인의 IPCSTS 비트가 Set됐는지를 확인하면 됨.

한편 CPU1이 IPCSET을 Set하면 본인의 IPCFLG도 Set이 됨.
이걸 clear하려면 CPU2가 IPCACK를 Set해줘야 함.

전반적인 동작 시퀀스를 설명해보면
1.CPU1은 IPCFLAG가 Clear 상태인지 확인
(이전에 보낸 신호를 cpu2가 잘 받았는지)
2.clear 돼있다면 IPCSET을 Set하여 신호 전달
3. CPU2는 본인의 IPCSTS 상태확인.
4. IPCSTS가 Set 돼있다면 본인할일 하고 IPCACK를 Set해서 Cpu1의 IPCFLG를 Clear
( CPU1은 이로인해 IPCFLG가 Clear 되어 CPU2가 전달을 잘 받았구나하고 인식)


한편 이렇게 플래그 값만 주고 받는게 아니라 서로에게 인터럽트를 발생시키는 것도 가능하다.
예를들면, CPU1에서 IPCSET을 하면 Cpu2에서 인터럽트가 발생되는 식이다.
이것은 32개의 플래그 중에 0 ~3번까지 4개만 가능하다.
필요에 맞게 PIE를 Enable 해서 사용하면  된다.


한편, 이렇게 flag만 주고 받는게  아니라 32bit의 데이터를 전달하는 용도로 사용되는 레지스터들도 존재한다.






반응형