上次想用led指示AD转换是否完成但没能成功,这次我想用LCD来指示,程序如下: #include "hw_types.h" #include "hw_memmap.h" #include "hw_gpio.h" #include "hw_ints.h" #include "sysctl.h" #include "I2CINT.H" #include "PCF8576.H" #include "LCD_TH3144.H" #include "hw_adc.h" #include "gpio.h" #include "adc.h" #include "debug.h"
#define KEY GPIO_PIN_4 void Go2Jtag(void)//防止jtag死锁 { SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOD); GPIODirModeSet(GPIO_PORTD_BASE,KEY,GPIO_DIR_MODE_IN); if(GPIOPinRead(GPIO_PORTD_BASE,KEY)==0) { while(1); } }
void delay(unsigned int n) // 软件延迟函数 { volatile int i; for(;n>0;n--) { for(i=0;i<1000;i++); } }
unsigned long ulData;
int main(void) { Go2Jtag(); I2CInit(100000, 1); SysCtlClockSet(SYSCTL_SYSDIV_1|SYSCTL_USE_PLL|SYSCTL_OSC_MAIN|SYSCTL_XTAL_6MHZ); SysCtlPeripheralEnable(SYSCTL_PERIPH_ADC); SysCtlADCSpeedSet(SYSCTL_ADCSPEED_125KSPS); ADCSequenceDisable(ADC_BASE,0); ADCSequenceConfigure(ADC_BASE,0,ADC_TRIGGER_PROCESSOR,0); ADCSequenceStepConfigure(ADC_BASE,0,0,ADC_CTL_CH0|ADC_CTL_END); ADCSequenceEnable(ADC_BASE,0);//使能采样序列0 while(1) { ADCProcessorTrigger(ADC_BASE,0);//程序触发采样序列 while((HWREG(ADC_BASE+ADC_O_X_SSFSTAT)&0x00000100)); ADCSequenceDataGet(ADC_BASE,0,&ulData); ulData=(ulData*1000*3)/1024; if(PCF8576_Ini(MODE_E, NOGLITTER)!=1) // 初始化PCF8576驱动 { while(1); } Lcd_Seg.D1 = HexToSeg(1); // 延时一段时间 Lcd_Update(); delay(1000); Lcd_Clean(); // 清屏 delay(1000); // 延时一段时间 } }
但是我在调试程序的时候,程序执行到I2CInit(100000, 1)中的IntEnable(INT_I2C),即使能I2C中断的时候,就会触发一个中断,然后陷入死循环,即程序跳转到IntDefaultHandler(void),这是怎么回事?请高手指教。
|