微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 对S3C2440裸板程序设计(无操作系统)的抽象

对S3C2440裸板程序设计(无操作系统)的抽象

时间:11-22 来源:互联网 点击:

  1. mpleted.
  2. }
  3. //**********************[Rd24C080]***********************************
  4. voidRd24C080(U32slvAddr,U32addr,U8*data)
  5. {
  6. _iicMode=SETRDADDR;
  7. _iicPt=0;
  8. _iicData[0]=(U8)addr;
  9. _iicDataCount=1;
  10. rIICDS=slvAddr;
  11. rIICSTAT=0xf0;//MasTx,Start
  12. //Clearingthependingbitisntneededbecausethependingbithasbeencleared.
  13. while(_iicDataCount!=-1);
  14. _iicMode=RDDATA;
  15. _iicPt=0;
  16. _iicDataCount=1;
  17. rIICDS=slvAddr;
  18. rIICSTAT=0xb0;//MasRx,Start
  19. rIICCON=0xaf;//ResumesIICoperation.
  20. while(_iicDataCount!=-1);
  21. *data=_iicData[1];
  22. }
  23. //-------------------------------------------------------------------------
  24. void__irqIicInt(void)
  25. {
  26. U32iicSt,i;
  27. rSRCPND=BIT_IIC;//Clearpendingbit
  28. rINTPND=BIT_IIC;
  29. iicSt=rIICSTAT;
  30. if(iicSt&0x8){}//Whenbusarbitrationisfailed.
  31. if(iicSt&0x4){}//WhenaslaveaddressismatchedwithIICADD
  32. if(iicSt&0x2){}//Whenaslaveaddressis0000000b
  33. if(iicSt&0x1){}//WhenACKisntreceived
  34. switch(_iicMode)
  35. {
  36. casePOLLACK:
  37. _iicStatus=iicSt;
  38. break;
  39. caseRDDATA:
  40. if((_iicDataCount--)==0)
  41. {
  42. _iicData[_iicPt++]=rIICDS;
  43. rIICSTAT=0x90;//StopMasRxcondition
  44. rIICCON=0xaf;//ResumesIICoperation.
  45. Delay(1);//Waituntilstopcondtionisineffect.
  46. //Toolongtime...
  47. //Thependingbitwillnotbesetafterissuingstopcondition.
  48. break;
  49. }
  50. _iicData[_iicPt++]=rIICDS;//Thelastdatahastobereadwithnoack.
  51. if((_iicDataCount)==0)
  52. rIICCON=0x2f;//ResumesIICoperationwithNOACK.
  53. else
  54. rIICCON=0xaf;//ResumesIICoperationwithACK
  55. break;
  56. caseWRDATA:
  57. if((_iicDataCount--)==0)
  58. {
  59. rIICSTAT=0xd0;//StopMasTxcondition
  60. rIICCON=0xaf;//ResumesIICoperation.
  61. Delay(1);//Waituntilstopcondtionisineffect.
  62. //Thependingbitwillnotbesetafterissuingstopcondition.
  63. break;
  64. }
  65. rIICDS=_iicData[_iicPt++];//_iicData[0]hasdummy.
  66. for(i=0;i<10;i++);//forsetuptimeuntilrisingedgeofIICSCL
  67. rIICCON=0xaf;//resumesIICoperation.
  68. break;
  69. caseSETRDADDR:
  70. //Uart_Printf("[S%d]",_iicDataCount);
  71. if((_iicDataCount--)==0)
  72. break;//IICoperationisstoppedbecauseofIICCON[4]
  73. rIICDS=_iicData[_iicPt++];
  74. for(i=0;i<10;i++);//ForsetuptimeuntilrisingedgeofIICSCL
  75. rIICCON=0xaf;//ResumesIICoperation.
  76. break;
  77. default:
  78. break;
  79. }
  80. }


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top