新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > S3C2440IIC中斷方式

        S3C2440IIC中斷方式

        作者: 時間:2016-11-21 來源:網絡 收藏
        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讀出的數據
        14. SelectFclk(2);//設置系統時鐘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,使能中斷,發送時鐘IICCLK/16
        29. rIICCON=(1<<7)|(0<<6)|(1<<5)|(0xf);
        30. rIICADD=0x10;//2440從機地址=[7:1]
        31. rIICSTAT=0x10;//IIC總線數據輸出使能(Rx/Tx)
        32. Uart_Printf("WritetestdataintoAT24C02n");
        33. for(i=0;i<256;i++)
        34. Wr24C02(0xa0,(U8)i,i);//寫入數據到AT24C02
        35. for(i=0;i<256;i++)//數組數據清零
        36. data[i]=0;
        37. Uart_Printf("ReadtestdatafromAT24C02n");
        38. for(i=0;i<256;i++)
        39. Rd24C02(0xa0,(U8)i,&(data[i]));//讀取AT24C02的數據放入data數組中
        40. for(i=0;i<16;i++)
        41. {
        42. for(j=0;j<16;j++)
        43. Uart_Printf("%2x",data[i*16+j]);//打印從AT24C02讀出的數據
        44. Uart_Printf("n");
        45. }
        46. }
        47. voidWr24C02(U32slvAddr,U32addr,U8data)
        48. {
        49. flag=1;
        50. rIICDS=slvAddr;//從器件地址寫入數據移位寄存器
        51. rIICSTAT=0xf0;//主發模式,產生起始信號,使能Rx/Tx
        52. rIICCON&=~0x10;//清除Tx/Rx中斷掛起標志
        53. while(flag==1)//等待發送完成
        54. Delay(1);
        55. flag=1;
        56. rIICDS=addr;//寫入存儲字節的地址到數據移位寄存器
        57. rIICCON&=~0x10;//清除Tx/Rx中斷掛起標志
        58. while(flag==1)//等待發送完成
        59. Delay(1);
        60. flag=1;
        61. rIICDS=data;//把要發送的數據寫入數據移位寄存器
        62. rIICCON&=~0x10;//清除Tx/Rx中斷掛起標志
        63. while(flag==1)//等待發送完成
        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;//從器件地址寫入數據移位寄存器
        74. rIICSTAT=0xf0;//主發模式,產生起始信號,使能Rx/Tx
        75. rIICCON&=~0x10;//清除Tx/Rx中斷掛起標志
        76. while(flag==1)//等待發送完成
        77. Delay(1);
        78. flag=1;
        79. rIICDS=addr;//寫入存儲字節的地址到數據移位寄存器
        80. rIICCON&=~0x10;//清除Tx/Rx中斷掛起標志
        81. while(flag==1)//等待發送完成
        82. Delay(1);
        83. flag=1;
        84. rIICDS=slvAddr;
        85. rIICSTAT=0xb0;//主接收模式,使能Rx/Tx
        86. rIICCON&=~0x10;//清除Tx/Rx中斷掛起標志
        87. while(flag==1)//等待發送完成
        88. Delay(1);
        89. //注意:讀取下面這個字節必須進行,因為在發送帶有讀命令的從設備地址后,
        90. //AT24C02A會再返回一個從設備地址信息或從設備內存地址信息作為應答,所以
        91. //一定要把該字節讀取后拋棄,因為它不是我們所要讀取的信息;
        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中斷方

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 玛多县| 阿巴嘎旗| 托里县| 娱乐| 长汀县| 深圳市| 西青区| 如皋市| 罗甸县| 肇东市| 宜宾县| 莎车县| 通化县| 瑞安市| 新沂市| 灌阳县| 威海市| 桐柏县| 宝山区| 手游| 江山市| 灵武市| 韩城市| 太和县| 桓仁| 吴川市| 囊谦县| 隆回县| 锡林郭勒盟| 宜宾市| 阳春市| 额尔古纳市| 十堰市| 崇左市| 广西| 定兴县| 郁南县| 来凤县| 图木舒克市| 昌邑市| 韶关市|