对S3C2440裸板程序设计(无操作系统)的抽象
时间:11-22
来源:互联网
点击:
- mpleted.
- }
- //**********************[Rd24C080]***********************************
- voidRd24C080(U32slvAddr,U32addr,U8*data)
- {
- _iicMode=SETRDADDR;
- _iicPt=0;
- _iicData[0]=(U8)addr;
- _iicDataCount=1;
- rIICDS=slvAddr;
- rIICSTAT=0xf0;//MasTx,Start
- //Clearingthependingbitisntneededbecausethependingbithasbeencleared.
- while(_iicDataCount!=-1);
- _iicMode=RDDATA;
- _iicPt=0;
- _iicDataCount=1;
- rIICDS=slvAddr;
- rIICSTAT=0xb0;//MasRx,Start
- rIICCON=0xaf;//ResumesIICoperation.
- while(_iicDataCount!=-1);
- *data=_iicData[1];
- }
- //-------------------------------------------------------------------------
- void__irqIicInt(void)
- {
- U32iicSt,i;
- rSRCPND=BIT_IIC;//Clearpendingbit
- rINTPND=BIT_IIC;
- iicSt=rIICSTAT;
- if(iicSt&0x8){}//Whenbusarbitrationisfailed.
- if(iicSt&0x4){}//WhenaslaveaddressismatchedwithIICADD
- if(iicSt&0x2){}//Whenaslaveaddressis0000000b
- if(iicSt&0x1){}//WhenACKisntreceived
- switch(_iicMode)
- {
- casePOLLACK:
- _iicStatus=iicSt;
- break;
- caseRDDATA:
- if((_iicDataCount--)==0)
- {
- _iicData[_iicPt++]=rIICDS;
- rIICSTAT=0x90;//StopMasRxcondition
- rIICCON=0xaf;//ResumesIICoperation.
- Delay(1);//Waituntilstopcondtionisineffect.
- //Toolongtime...
- //Thependingbitwillnotbesetafterissuingstopcondition.
- break;
- }
- _iicData[_iicPt++]=rIICDS;//Thelastdatahastobereadwithnoack.
- if((_iicDataCount)==0)
- rIICCON=0x2f;//ResumesIICoperationwithNOACK.
- else
- rIICCON=0xaf;//ResumesIICoperationwithACK
- break;
- caseWRDATA:
- if((_iicDataCount--)==0)
- {
- rIICSTAT=0xd0;//StopMasTxcondition
- rIICCON=0xaf;//ResumesIICoperation.
- Delay(1);//Waituntilstopcondtionisineffect.
- //Thependingbitwillnotbesetafterissuingstopcondition.
- break;
- }
- rIICDS=_iicData[_iicPt++];//_iicData[0]hasdummy.
- for(i=0;i<10;i++);//forsetuptimeuntilrisingedgeofIICSCL
- rIICCON=0xaf;//resumesIICoperation.
- break;
- caseSETRDADDR:
- //Uart_Printf("[S%d]",_iicDataCount);
- if((_iicDataCount--)==0)
- break;//IICoperationisstoppedbecauseofIICCON[4]
- rIICDS=_iicData[_iicPt++];
- for(i=0;i<10;i++);//ForsetuptimeuntilrisingedgeofIICSCL
- rIICCON=0xaf;//ResumesIICoperation.
- break;
- default:
- break;
- }
- }
S3C2440裸板程序无操作系 相关文章:
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)
- openwebmailV1.60安装教学(11-12)
- Linux嵌入式系统开发平台选型探讨(11-09)
- Windows CE 进程、线程和内存管理(二)(11-09)