到井号那里就无法再执行下去了,仿佛是在中断里出不来了,请高手帮忙看一看啊,小弟急啊!!!!<br /><br /><br /><br /><br /><br />#include "option.h"<br />#include "def.h"<br />#include "44b.h"<br />#include "44blib.h"<br /><br />#define WRDATA (1)<br />#define RDDATA (2)<br />#define SETRDADDR (3)<br /><br /><br />void Isr_Init(void);<br />void HaltUndef(void);<br />void HaltSwi(void);<br />void HaltPabort(void); <br />void HaltDabort(void);<br />void Wr24C040(U32 slvAddr,U32 addr,U8 data);<br />void Rd24C040(U32 slvAddr,U32 addr,U8 *data);<br />void __irq IicInt(void);<br />volatile int _iicDataCount;<br />volatile int _iicMode;<br />U8 _iicaddr;<br />U8 _iicdata;<br /><br />void Main(void)<br />{<br /> unsigned int i;<br /> U8 data[256]; <br /><br /> rSYSCFG=SYSCFG_8KB;<br />#if (PLLON==1)<br /> ChangePllValue(PLL_M,PLL_P,PLL_S);<br />#endif<br /><br /> Isr_Init();<br /> Port_Init();<br /> Uart_Init(0,115200);<br /> Uart_Select(0);<br /> Delay(0); //calibrate Delay()<br /> Led_Display(7);<br /> Delay(1000); //calibrate Delay()<br /> Led_Display(0);<br /> Delay(5000); //calibrate Delay()<br /> Led_Display(7);<br /> Uart_Printf("
start
");<br /><br /> pISR_IIC=(unsigned)IicInt;<br /> rINTMSK=~(BIT_GLOBAL|BIT_IIC);<br /> rIICCON=0xaf;<br /> rIICSTAT=0x10;<br /> rIICADD=0x10;<br /> <br /> Uart_Printf("Write test data into KS24C080
");<br /><br /> for(i=0;i<16;i++)<br /> Wr24C040(0xa0,(U8)i,i);<br /><br /> for(i=0;i<16;i++)<br /> data=0;<br /><br /> <br /> Uart_Printf("Read test data from KS24C080
");<br /> <br /> for(i=0;i<16;i++)<br /> Rd24C040(0xa0,(U8)i,&(data)); <br /> <br /> for(i=0;i<16;i++)<br /> {<br /> Uart_Printf("%2x ",data);<br /> Uart_Printf("
");<br /> }<br /><br />}<br /><br /><br />void Wr24C040(U32 slvAddr,U32 addr,U8 data)<br />{<br /> _iicMode=WRDATA;<br /> _iicaddr=addr;<br /> _iicdata=data;<br /> _iicDataCount=3;<br /> rIICDS=slvAddr;<br /> rIICSTAT=0xf0;<br />############################################################<br /> Uart_Printf("
test1
");<br /> while(_iicDataCount!=-1);<br /> <br />}<br /><br /><br /><br />void Rd24C040(U32 slvAddr,U32 addr,U8 *data)<br />{<br /> _iicMode=SETRDADDR;<br /> _iicaddr=addr;<br /> _iicDataCount=2;<br /> rIICDS=slvAddr;<br /> rIICSTAT=0xf0;<br /> while(_iicDataCount!=0);<br /> _iicMode=RDDATA;<br /> _iicDataCount=2;<br /> rIICDS=slvAddr;<br /> rIICSTAT=0xb0; //MasRx,Start<br /> rIICCON=0xaf; //resumes IIC operation. <br /> while(_iicDataCount!=0);<br /> *data=_iicdata;<br />}<br /><br /><br />void __irq IicInt(void)<br />{ <br /> U32 i;<br /><br /> switch(_iicMode)<br />{<br /> case WRDATA: <br /> if(_iicDataCount==1)<br /> {<br /> _iicDataCount--;<br /> Uart_Printf("_iicDataCount3=%d
",_iicDataCount);<br /> rIICSTAT=0xd0;<br /> rIICCON=0xaf;<br /> Delay(1); <br /> } <br /> else if(_iicDataCount==2)<br /> {<br /> _iicDataCount--;<br /> Uart_Printf("_iicDataCount2=%d
",_iicDataCount);<br /> rIICDS=_iicdata;<br /> for(i=0;i<10;i++);<br /> rIICCON=0xaf;<br /> }<br /> else if(_iicDataCount==3)<br /> {<br /> _iicDataCount--;<br /> Uart_Printf("_iicDataCount1=%d
",_iicDataCount);<br /> rIICDS=_iicaddr;<br /> for(i=0;i<10;i++);<br /> rIICCON=0xaf;<br /> } <br /> break; <br /><br /> <br /> case SETRDADDR:<br /> if(_iicDataCount==2)<br /> {<br /> _iicDataCount--;<br /> rIICDS=_iicaddr;<br /> for(i=0;i<10;i++);<br /> rIICCON=0xaf;<br /> } <br /> else<br /> {<br /> _iicDataCount--;<br /> }<br /> break; <br /><br /><br /> case RDDATA:<br /> if(_iicDataCount==2)<br /> {<br /> _iicDataCount--;<br /> _iicdata=rIICDS;<br /> for(i=0;i<10;i++);<br /> rIICCON=0x2f;//resumes IIC operation with NOACK.<br /> } <br /> else<br /> {<br /> _iicDataCount--;<br /> rIICSTAT=0x90; //stop MasRx condition <br /> rIICCON=0xaf; //resumes IIC operation.<br /> Delay(1); //wait until stop condtion is in effect.<br /> //too long time... <br /> <br /> }<br /> break;<br /><br /> <br /> default:<br /> break; <br />}<br /><br />} <br /><br /><br />void Isr_Init(void)<br />{<br /> U32 i;<br /> <br /> pISR_UNDEF=(unsigned)HaltUndef;<br /> pISR_SWI =(unsigned)HaltSwi;<br /> pISR_PABORT=(unsigned)HaltPabort;<br /> pISR_DABORT=(unsigned)HaltDabort;<br /> <br /> for(i=_RAM_STARTADDRESS;i<(_RAM_STARTADDRESS+0x20);i+=4)<br /> {<br /> *((volatile unsigned *)i)=0xEA000000+0x1FFE;<br /> }<br /><br /> rINTCON=0x5; // Non-vectored,IRQ enable,FIQ disable <br /><br /> rINTMOD=0x0; // All=IRQ mode<br /> rINTMSK|=BIT_GLOBAL|BIT_EINT3; // All interrupt is masked.<br />}<br /><br /><br />void HaltUndef(void)<br />{<br /> Uart_Printf("Undefined instruction exception!!!
");<br /> while(1);<br />}<br /><br />void HaltSwi(void)<br />{<br /> Uart_Printf("SWI exception!!!
");<br /> while(1);<br />}<br /><br />void HaltPabort(void)<br />{<br /> Uart_Printf("Pabort exception!!!
");<br /> while(1);<br />}<br /><br />void HaltDabort(void)<br />{<br /> Uart_Printf("Dabort exception!!!
");<br /> while(1);<br /> |
|