Tool 정보 : ccsv9
Board 정보 : EVM C6678
keystone 인터럽트 관련 참고 사이트 :
https://processors.wiki.ti.com/index.php/Configuring_Interrupts_on_Keystone_Devices
gpio 관련 문서 : https://www.ti.com/lit/ug/sprugv1/sprugv1.pdf
TEST_PH1(80PIN)
GPIO Memory Map Address :
Start : 0x02320000
End : 0x023200FF
SIZE : 256
GPIO0 ~ GPIO15
인터럽트로 사용 GPIO -> GPIO14, GPIO15
사용 라이브러리 및 Products :
Products : c667x PDK(2.0.16), SYS/BIOS (6.76.3.01)
라이브러리 :
C:\ti\pdk_c667x_2_0_16\packages\ti\platform\evmc6678l\platform_lib\lib\debug\ti.platform.evm6678l.lite.lib
C:\ti\pdk_c667x_2_0_16\packages\ti\csl\lib\c6678\c66\release\ti.csl.ae66
C:\ti\pdk_c667x_2_0_16\packages\ti\csl\lib\c6678\c66\release\ti.csl.intc.ae66
시험 설명
GPIO#13번핀을 인터럽트 신호 발생원으로 사용하고 GPIO#14, #15번을 각각 인터럽트핀으로 사용한다.
GPIO#13은 Clock함수를 이용하여 일정 주기(100msec)마다 인터럽트를 발생하고 발생된 인터럽트는 EventCombiner를 거쳐 Hwi인터럽트 설정 함수를 호출하여 인터럽트 처리를 한다.
인터럽트 처리는 Global변수를 증가하여 인터럽트 발생횟수를 확인한다.
소스코드 위치
https://github.com/pcw1029/tms320C6678/tree/main/gpioInterrupt
TMS320C6678문서에 따르면 인터럽트 Event Number를 보면 GPIO핀은 GPIO8 ~ GPIO15을 인터럽트 사용할수 있으며, 이벤트번호 82 ~ 89까지 맵핑되어 있다.
설정(XGCONF)
- SYS/BIOS -> Scheduling -> Hwi :
- Instance로 이동하여 아래 내용 설정
- ISR Function이름, Interrupt number를 설정한다. 총 2개의 인터럽트를 생성할것이기 때문에 ADD를 눌러 인터럽트 1개를 더 추가하여 설정한다. [(인터럽트 번호는 각각 4,5를 사용할 것이며 인터럽트 0~3 예약되어 있어 사용할수 없다.)( 인터럽트가 발생되었을때 콜백될 함수는 gpio14Interrupt, gpio15Interrupt로 사용한다.)]
- Event ID 설정 : 이벤트는 88, 89를 사용할 계획이므로 각각 88, 89를 설정한다. 이벤트 번호는 위에 그림에서 확인할수있고 또는 GPIO번호 + 74를 하면된다.
- SYS/BIOS : Device Support로 이동하여 Event Combiner를 선택한다.
- Module : Add the EventCombiner module to my configuration을 체크
- Event group 2 Hwi 항목에 6으로 설정 (이벤트 그룹 2를 선택한 이유는 event Combiner의 논리적 표현을 보면 124개의 시스템 이벤트가 있고 이를 4개의 그룹으로 나눴다. 즉 [Group#1 : event#04 ~ event#31], [Group#2 : event#32 ~ event#63], [Group#2 : event#64 ~ event#95], [Group#3 : event#96 ~ event#127]이다. Event 88,89가 GPIO인터럽트로 사용할수 있으면 이는 Event Combiner Group#2에 속해있기 때문이다.
- Events : Event 88, 89번의 Unmake를 false->true로 변경하고, 실행 함수명을 설정해준다. 함수명은 hwiCombinGpio14Gpio15다.
- 프로젝트 생성시 ccs project인경우 task가 기본적으로 추가되어있으며 실험에선 사용하지 않으므로 삭제한다. 실험에서는 Clock함수를 생성하여 사용할것이기 때문이다.
- SYS/BIOS -> Scheduling -> Clock :
- Module : Add the Clock support module to my configuration 체크
- Instance : Add
- Function : gpio13InterruptOccursEveryCycle
- Initial timeout : 50
- Period : 50
- Start at boot time when instance is created : 체크
댓글 없음:
댓글 쓰기