[MINI51] mini51学习第四贴 IIC

[复制链接]
 楼主| cnjxlxp 发表于 2012-2-3 22:50 | 显示全部楼层 |阅读模式
本帖最后由 hotpower 于 2012-9-22 12:42 编辑

芯唐其实已经有写好的IIC的子函数,园地也有用IIC的工程,下载下来学习发现有几句命令是用的操作寄存器处理的。于是翻了驱动手册,试试可不可以所有命令都用库函数。发现可以。程序如下。。。只是改了2个地方
DrvI2C_WriteData (0xA0);//I2C->DATA = 0xA0;  
while ( DrvI2C_GetIntFlag ( ) == 0);//while (I2C->CON_BITS.SI == 0);

  1. /**   
  2.   ******************************************************************************
  3.   * @file    EEPROM_24LC64.c
  4.   * @author  NuMicro MCU Software Team
  5.   * @version V1.01
  6.   * @date    7. Dec 2011
  7.   * @brief   Õâ¸öµµ°¸Ìṩ¶Áд24LC64 EEPROMËùÐèÈÍÌ幦ÄÜ.
  8.   ******************************************************************************
  9.   * @copyright
  10.   *
  11.   * Copyright (c) 2011 ÐÂÌÆ¿Æ¼¼
  12.   
  13.   */
  14. #include <stdio.h>
  15. #include "MINI51.h"
  16. #include "DrvGPIO.h"
  17. #include "DrvSYS.h"
  18. #include "DrvI2C.h"
  19. /**   
  20.   * @brief д³öÒ»¸öλԪ×é×ÊÁϵ½Ö¸¶¨µÄλַ
  21.   * @param address ҪдµÄλַ
  22.   * @param data  ÒªÐ´ÈëµÄ×ÊÁÏ
  23.   * @return -
  24.   */
  25. void Write_24LC64(uint32_t address, uint8_t data)
  26. {
  27.     uint32_t i;
  28.    // SystemCoreClock = DrvSYS_GetHCLKFreq();
  29.    
  30.     /* ´ò¿ªI2CÇÒÉ趨ʱÖÓËÙ¶ÈΪ100Kbsp    */
  31.     DrvI2C_Open(100000);
  32.     /* ´«ËÍI2C START ѶºÅ    */
  33.     DrvI2C_Ctrl(1, 0, 0, 0);   
  34.     while ( DrvI2C_GetIntFlag ( ) == 0);//while (I2C->CON_BITS.SI == 0);
  35.    
  36.     /* ËͳöwriteÃüÁî    */
  37.     DrvI2C_WriteData (0xA0);//I2C->DATA = 0xA0;   
  38.     DrvI2C_Ctrl(0, 0, 1, 0);
  39.     while ( DrvI2C_GetIntFlag ( ) == 0);//while (I2C->CON_BITS.SI == 0);
  40.    
  41.     /* Ëͳö¸ßλԪλַ    */
  42.     I2C->DATA = (address >> 8) & 0XFF;
  43.     DrvI2C_Ctrl(0, 0, 1, 1);
  44.     while (I2C->CON_BITS.SI == 0);
  45.    
  46.     /* ËͳöµÍλԪλַ    */
  47.     I2C->DATA = address & 0XFF;
  48.     DrvI2C_Ctrl(0, 0, 1, 1);
  49.     while (I2C->CON_BITS.SI == 0);
  50.    
  51.     /* ´«ËÍ×ÊÁÏ    */
  52.     I2C->DATA = data;
  53.     DrvI2C_Ctrl(0, 0, 1, 1);
  54.     while (I2C->CON_BITS.SI == 0);
  55.    
  56.     /* ´«ËÍI2C STOPѶºÅ    */
  57.     DrvI2C_Ctrl(0, 1, 1, 0);
  58.     while (I2C->CON_BITS.STOP== 1);
  59.    
  60.     /* ¹Ø±ÕI2C    */
  61.     DrvI2C_Close();
  62.     for (i = 0;i < 120000;i++);   
  63. }
  64. /**   
  65.   * @brief ´ÓÖ¸¶¨µÄλַ¶Áȡһ¸öλԪ×é×ÊÁÏ
  66.   * @param address Òª¶ÁµÄλַ  
  67.   * @return »Ø´«¶Áµ½µÄ×ÊÁÏ  
  68.   */
  69. uint8_t Read_24LC64(uint32_t address)
  70. {
  71.     uint8_t TEMP;
  72.         
  73.     //SystemCoreClock = DrvSYS_GetHCLKFreq();
  74.    
  75.     /* ´ò¿ªI2CÇÒÉ趨ʱÖÓËÙ¶ÈΪ100Kbsp    */
  76.     DrvI2C_Open(100000);
  77.    
  78.     /* ´«ËÍI2C START ѶºÅ    */
  79.     DrvI2C_Ctrl(1, 0, 1, 0);        
  80.     while (I2C->CON_BITS.SI == 0);  
  81.     /* ËͳöwriteÃüÁî    */
  82.     I2C->DATA = 0XA0;
  83.     DrvI2C_Ctrl(0, 0, 1, 0);      
  84.     while (I2C->CON_BITS.SI == 0);
  85.     /* Ëͳö¸ßλԪλַ    */
  86.     I2C->DATA = (address >> 8) & 0XFF;
  87.     DrvI2C_Ctrl(0, 0, 1, 1);
  88.     while (I2C->CON_BITS.SI == 0);
  89.     /* ËͳöµÍλԪλַ    */
  90.     I2C->DATA = address & 0XFF;
  91.     DrvI2C_Ctrl(0, 0, 1, 0);   
  92.     while (I2C->CON_BITS.SI == 0);
  93.     /* ´«ËÍI2C STOPѶºÅ    */
  94.     DrvI2C_Ctrl(0, 1, 1, 0);
  95.     while (I2C->CON_BITS.STOP == 1);
  96.     /* ´«ËÍI2C RESTART ѶºÅ    */
  97.     DrvI2C_Ctrl(1, 0, 1, 0);      
  98.     while (I2C->CON_BITS.SI == 0);
  99.     /* ËͳöreadÃüÁî    */
  100.     I2C->DATA = 0XA1;
  101.     DrvI2C_Ctrl(0, 0, 1, 1);
  102.     while (I2C->CON_BITS.SI == 0);
  103.     /* ¶ÁÈ¡×ÊÁÏ    */
  104.     I2C->DATA = 0XFF;
  105.     DrvI2C_Ctrl(0, 0, 1, 0);   
  106.     while (I2C->CON_BITS.SI == 0);
  107.     TEMP = I2C->DATA;
  108.    
  109.     /* ´«ËÍI2C STOPѶºÅ    */
  110.     DrvI2C_Ctrl(0, 1, 1, 0);   
  111.     while (I2C->CON_BITS.STOP == 1);
  112.    
  113.     /* ¹Ø±ÕI2C    */
  114.     DrvI2C_Close();
  115.     return TEMP;
  116. }

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
xyz549040622 发表于 2012-2-4 13:51 | 显示全部楼层
不错!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

0

主题

46

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部

0

主题

46

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部