2016-10-18 4 views
1

스위치 입력을 기반으로 LED 색상을 변경하기 위해 TI Tiva C Launchpad (TM4C123GH6PM)를 프로그래밍하고 있습니다. 이것은 비교적 간단해야하지만, 원하는 포트 F의 잠금을 해제하고 커밋 비트를 쓰는 데 문제가 있습니다. CR 비트 (즉, 스위치를 활성화하기 위해)를 작성하려고하면 디버거가 "BusFault_Handler"로 바로갑니다.TI TM4C - GPIOCR 설정이 BusFault로 바뀌는 이유는 무엇입니까?

#define GPIOLock_PortF (*(unsigned int*)0x40025520) 
#define GPIOCR_PortF (*(unsigned int*)0x40025524) 
#define Unlock ((unsigned int)0x4C4F434B) 
#define SWs ((unsigned int)0x11) 

int main(){ 

GPIOLock_PortF = Unlock; //undo GPIOLock to get to GPIOCR 
GPIOCR_PortF = SWs; //enable commit for switches 

을 최대한 빨리 C의 마지막 줄에 대한 최초의 어셈블리 명령어를 실행하려고 ...

MOVS R0, #17 

... 다음과 같이 그 시점까지

내 코드입니다 디버거가 "BusFault_Handler"로 떨어집니다.

누구나 분명히 잘못된 것을 볼 수 있습니까? 데이터 시트를 오해 했습니까?

감사합니다.

답변

0

당신은 PortF

에 대한 GPIO를위한 클럭을 가능하게 놓친 초기화 절차는 포트 F 페이지 340 클럭을 활성화해야 여기에 데이터 시트 페이지 656

http://www.ti.com/lit/ds/spms376e/spms376e.pdf

에 명시되어

.

#define SYSCTL_RCGC2_R (*(unsigned int *)0x400FE108)  
#define GPIOLock_PortF (*(unsigned int*)0x40025520) 
#define GPIOCR_PortF (*(unsigned int*)0x40025524) 
#define Unlock ((unsigned int)0x4C4F434B) 
#define SWs ((unsigned int)0x11) 

int main(){ 
    SYSCTL_RCGC2_R |= 0x00000020; // enable clock for PortF 
    GPIOLock_PortF = Unlock; //undo GPIOLock to get to GPIOCR 
    GPIOCR_PortF = SWs; //enable commit for switches 
+0

아, 맞아. 내 코드에서 Clock Enable (클럭 활성화)을 사용했지만 그 전에는 잠금 해제 (잠금 해제) 후에 사용했습니다. – PoGaMi

+0

게시 된 코드에 Clock Enable이 없습니다 : D – Uint32