<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > S3C2440IIC中斷方式

          S3C2440IIC中斷方式

          作者: 時間:2016-11-21 來源:網(wǎng)絡 收藏
          1. #include
          2. #include"2440addr.h"
          3. #include"2440lib.h"
          4. #include"Option.h"
          5. #include"def.h"
          6. intflag;//中斷標志(在中斷子程序里清零,即未中斷flag=1,中斷后flag=0)
          7. void__irqIicInt(void);
          8. voidWr24C02(U32slvAddr,U32addr,U8data);
          9. voidRd24C02(U32slvAddr,U32addr,U8*data);
          10. voidMain(void)
          11. {
          12. unsignedinti,j;
          13. staticU8data[256];//用于存儲AT24C02讀出的數(shù)據(jù)
          14. SelectFclk(2);//設置系統(tǒng)時鐘400M
          15. ChangeClockDivider(2,1);//設置分頻1:4:8
          16. CalcBusClk();//計算總線頻率
          17. rGPHCON&=~((3<<4)|(3<<6));
          18. rGPHCON|=(2<<4)|(2<<6);//GPH2--TXD[0];GPH3--RXD[0]
          19. rGPHUP=0x00;//使能上拉功能
          20. Uart_Init(0,115200);
          21. Uart_Select(0);
          22. Uart_Printf("[IICTest(Polling)usingAT24C020]n");
          23. rGPEUP|=0xc000;//關上拉
          24. rGPECON&=~0xf0000000;
          25. rGPECON|=0xa0000000;//GPE15:IICSDA,GPE14:IICSCL
          26. pISR_IIC=(unsigned)IicInt;//設置中斷程序地址
          27. rINTMSK&=~(BIT_IIC);//開中斷源
          28. //使能應答,IIC總線時鐘IICCLK=PCLK/16,使能中斷,發(fā)送時鐘IICCLK/16
          29. rIICCON=(1<<7)|(0<<6)|(1<<5)|(0xf);
          30. rIICADD=0x10;//2440從機地址=[7:1]
          31. rIICSTAT=0x10;//IIC總線數(shù)據(jù)輸出使能(Rx/Tx)
          32. Uart_Printf("WritetestdataintoAT24C02n");
          33. for(i=0;i<256;i++)
          34. Wr24C02(0xa0,(U8)i,i);//寫入數(shù)據(jù)到AT24C02
          35. for(i=0;i<256;i++)//數(shù)組數(shù)據(jù)清零
          36. data[i]=0;
          37. Uart_Printf("ReadtestdatafromAT24C02n");
          38. for(i=0;i<256;i++)
          39. Rd24C02(0xa0,(U8)i,&(data[i]));//讀取AT24C02的數(shù)據(jù)放入data數(shù)組中
          40. for(i=0;i<16;i++)
          41. {
          42. for(j=0;j<16;j++)
          43. Uart_Printf("%2x",data[i*16+j]);//打印從AT24C02讀出的數(shù)據(jù)
          44. Uart_Printf("n");
          45. }
          46. }
          47. voidWr24C02(U32slvAddr,U32addr,U8data)
          48. {
          49. flag=1;
          50. rIICDS=slvAddr;//從器件地址寫入數(shù)據(jù)移位寄存器
          51. rIICSTAT=0xf0;//主發(fā)模式,產生起始信號,使能Rx/Tx
          52. rIICCON&=~0x10;//清除Tx/Rx中斷掛起標志
          53. while(flag==1)//等待發(fā)送完成
          54. Delay(1);
          55. flag=1;
          56. rIICDS=addr;//寫入存儲字節(jié)的地址到數(shù)據(jù)移位寄存器
          57. rIICCON&=~0x10;//清除Tx/Rx中斷掛起標志
          58. while(flag==1)//等待發(fā)送完成
          59. Delay(1);
          60. flag=1;
          61. rIICDS=data;//把要發(fā)送的數(shù)據(jù)寫入數(shù)據(jù)移位寄存器
          62. rIICCON&=~0x10;//清除Tx/Rx中斷掛起標志
          63. while(flag==1)//等待發(fā)送完成
          64. Delay(1);
          65. rIICSTAT=0xd0;//禁止Rx/Tx
          66. rIICCON=0xaf;//ResumesIICoperation.
          67. Delay(1);
          68. }
          69. voidRd24C02(U32slvAddr,U32addr,U8*data)
          70. {
          71. U8temp;
          72. flag=1;
          73. rIICDS=slvAddr;//從器件地址寫入數(shù)據(jù)移位寄存器
          74. rIICSTAT=0xf0;//主發(fā)模式,產生起始信號,使能Rx/Tx
          75. rIICCON&=~0x10;//清除Tx/Rx中斷掛起標志
          76. while(flag==1)//等待發(fā)送完成
          77. Delay(1);
          78. flag=1;
          79. rIICDS=addr;//寫入存儲字節(jié)的地址到數(shù)據(jù)移位寄存器
          80. rIICCON&=~0x10;//清除Tx/Rx中斷掛起標志
          81. while(flag==1)//等待發(fā)送完成
          82. Delay(1);
          83. flag=1;
          84. rIICDS=slvAddr;
          85. rIICSTAT=0xb0;//主接收模式,使能Rx/Tx
          86. rIICCON&=~0x10;//清除Tx/Rx中斷掛起標志
          87. while(flag==1)//等待發(fā)送完成
          88. Delay(1);
          89. //注意:讀取下面這個字節(jié)必須進行,因為在發(fā)送帶有讀命令的從設備地址后,
          90. //AT24C02A會再返回一個從設備地址信息或從設備內存地址信息作為應答,所以
          91. //一定要把該字節(jié)讀取后拋棄,因為它不是我們所要讀取的信息;
          92. flag=1;
          93. temp=rIICDS;
          94. rIICCON&=~0x10;//清除Tx/Rx中斷掛起標志
          95. while(flag==1)
          96. Delay(1);
          97. rIICCON=0x2f;//ResumesIICoperation.禁止應答
          98. *data=rIICDS;
          99. Delay(1);
          100. rIICSTAT=0x90;//StopMasRxcondition
          101. rIICCON=0xaf;//ResumesIICoperation.
          102. Delay(1);//Waituntilstopcondtionisineffect.
          103. }
          104. void__irqIicInt(void)
          105. {
          106. ClearPending(BIT_IIC);
          107. flag=0;
          108. }


          關鍵詞: S3C2440IIC中斷方

          評論


          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();