[文档下载] MUC1XX之24C64驱动

[复制链接]
 楼主| niuyaliang 发表于 2014-1-26 20:13 | 显示全部楼层 |阅读模式
  1. /*---------------------------------------------------------------------------------------------------------*/
  2. /*                                                                                                         */
  3. /* Copyright(c) 2009 Nuvoton Technology Corp. All rights reserved.                                         */
  4. /*                                                                                                         */
  5. /*---------------------------------------------------------------------------------------------------------*/
  6. #include <stdio.h>
  7. #include "NUC1xx.h"
  8. #include "Driver\DrvGPIO.h"
  9. #include "Driver\DrvI2C.h"
  10. #include "Driver\DrvSYS.h"
  11. #include "EEPROM_I2C_24LC64.h"

  12. void Write_24LC64(uint32_t address,uint8_t data )
  13. {
  14.         uint32_t i;
  15.         SystemCoreClock = DrvSYS_GetHCLKFreq();
  16.   //Open I2C1 and set clock = 50Kbps
  17.         DrvI2C_Open(I2C_PORT1, 50000);
  18.        
  19.            //send i2c start
  20.         DrvI2C_Ctrl(I2C_PORT1, 1, 0, 0, 0);        //set start
  21.         while (I2C1->I2CON.SI == 0);                        //poll si flag
  22.         //send writer command
  23.         I2C1->I2CDAT = 0XA0;                                        //send writer command
  24.     DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 0); //clr si flag
  25.     while( I2C1->I2CON.SI == 0 );                    //poll si flag
  26.         //send address high
  27.         I2C1->I2CDAT = (address>>8)&0XFF;       
  28.         DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 1); //clr si and set ack       
  29.         while( I2C1->I2CON.SI == 0 );                        //poll si flag
  30.         //send address low
  31.         I2C1->I2CDAT = address&0XFF;       
  32.         DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 1); //clr si and set ack       
  33.         while( I2C1->I2CON.SI == 0 );                        //poll si flag
  34.         //send data
  35.         I2C1->I2CDAT = data;                                        //write data to
  36.         DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 1); //clr si and set ack       
  37.         while( I2C1->I2CON.SI == 0 );                        //poll si flag
  38.            //send i2c stop
  39.         DrvI2C_Ctrl(I2C_PORT1, 0, 1, 1, 0); //send stop       
  40.         while( I2C1->I2CON.STO);
  41.         //while( I2C1->CON.SI == 0 );
  42.         for(i=0;i<60;i++);
  43.         DrvI2C_Close(I2C_PORT1);
  44.          
  45.         for(i=0;i<6000;i++);
  46.         for(i=0;i<6000;i++);
  47. }

  48. uint8_t Read_24LC64(uint32_t address)
  49. {
  50.         uint8_t TEMP;
  51.   //Open I2C1 and set clock = 50Kbps
  52.         SystemCoreClock = DrvSYS_GetHCLKFreq();
  53.         DrvI2C_Open(I2C_PORT1, 50000);
  54.         //send i2c start
  55.     DrvI2C_Ctrl(I2C_PORT1, 1, 0, 1, 0);                 //set start
  56.         while (I2C1->I2CON.SI == 0);                                //poll si flag
  57.          
  58.            //send writer command
  59.         I2C1->I2CDAT = 0XA0;
  60.     DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 0);           //clr si
  61.     while( I2C1->I2CON.SI == 0 );                           //poll si flag
  62.        
  63.         //send address high
  64.     I2C1->I2CDAT = (address>>8)&0XFF;       
  65.         DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 1);    //clr si and set ack
  66.         while( I2C1->I2CON.SI == 0 );                           //poll si flag
  67.    
  68.         //send address low
  69.         I2C1->I2CDAT = address&0XFF;       
  70.         DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 0);    //clr si        and set ack
  71.         while( I2C1->I2CON.SI == 0 );                           //poll si flag
  72.        
  73.         //send start flag
  74.         DrvI2C_Ctrl(I2C_PORT1, 1, 0, 1, 0);    //clr si and send start       
  75.         while( I2C1->I2CON.SI == 0 );                           //poll si flag
  76.        
  77.         //send read command
  78.         I2C1->I2CDAT = 0XA1;
  79.         DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 1);    //clr si
  80.     while( I2C1->I2CON.SI == 0 );                           //poll si flag

  81.         //resive data
  82.         I2C1->I2CDAT = 0XFF;
  83.         DrvI2C_Ctrl(I2C_PORT1, 0, 0, 1, 0);    //clr si       
  84.         while( I2C1->I2CON.SI == 0 );                           //poll si flag
  85.         TEMP= I2C1->I2CDAT;
  86.         //send i2c stop
  87.         DrvI2C_Ctrl(I2C_PORT1, 0, 1, 1, 0);    //clr si and set stop
  88.         while( I2C1->I2CON.STO);
  89.         DrvI2C_Close(I2C_PORT1);

  90.         return TEMP;
  91. }


 楼主| niuyaliang 发表于 2014-1-26 20:14 | 显示全部楼层
  1. #ifndef __EEPROM_I2C_24LC64_H__
  2. #define __EEPROM_I2C_24LC64_H__
  3.      
  4. extern void Write_24LC64(uint32_t address,uint8_t data);
  5. extern uint8_t Read_24LC64(uint32_t address);
  6. #endif


 楼主| niuyaliang 发表于 2014-1-31 23:12 | 显示全部楼层
:lol这么霸气外漏的驱动没人顶居然
wangfeng0198 发表于 2014-2-1 08:26 | 显示全部楼层
ding ding ding
zxf0168 发表于 2014-2-1 22:30 来自手机 | 显示全部楼层
我帮你顶一下楼主
zxf0168 发表于 2014-2-13 14:41 来自手机 | 显示全部楼层
niuyaliang 发表于 2014-1-31 23:12
这么霸气外漏的驱动没人顶居然

谁说没人顶,只可惜我看不到
a2358767921 发表于 2014-8-15 11:34 | 显示全部楼层
虚心向大伙学习
530120101 发表于 2014-8-15 11:36 | 显示全部楼层
lqc754 发表于 2014-8-16 13:49 | 显示全部楼层
学习!
mintspring 发表于 2014-8-18 20:14 | 显示全部楼层
我顶,楼主太给力了,我说,是你自己写的吗?
 楼主| niuyaliang 发表于 2014-8-25 09:55 | 显示全部楼层
mintspring 发表于 2014-8-18 20:14
我顶,楼主太给力了,我说,是你自己写的吗?

直接copy的,不是自己写的
mintspring 发表于 2014-8-25 19:17 | 显示全部楼层
niuyaliang 发表于 2014-8-25 09:55
直接copy的,不是自己写的

是个IIC的驱动啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

212

主题

2427

帖子

7

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