您的位置 首页 系统

S3C2440IIC中止方法

includestringh>include2440addrhinclude2440libhincludeOptionhincludedefhintflag;中断标志(在中断子程序里清零,

  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(“WritetestdataintoAT24C02\n”);
  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(“ReadtestdatafromAT24C02\n”);
  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. }

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/xitong/262817.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部