[ZLG-MCU] I2C初始化的问题

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

iic

iic部件内部状态不受调试器的控制,如果出现类似问题,只要有一次你就得按硬复位键或者断电来清除。否则下次重新进入调试状态还是一样的问题。
mj2008 发表于 2008-4-17 10:22 | 显示全部楼层

补充一下,lmijtag+iar511下

  
 楼主| 耄耄耄 发表于 2008-4-17 13:18 | 显示全部楼层

版本

这类问题与IAR的版本有关么?我用的是4.42A
mj2008 发表于 2008-4-18 13:19 | 显示全部楼层

跟版本没有关系,跟jtag的驱动有关系吧

  
 楼主| 耄耄耄 发表于 2008-4-18 14:12 | 显示全部楼层

xiexie

问题已经解决了,呵呵,谢谢您的指点!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

6

主题

30

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部