⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.c.bak

📁 IAR编译器下
💻 BAK
📖 第 1 页 / 共 2 页
字号:
#include "hw_ints.h"
#include "hw_memmap.h"
#include "hw_types.h"
#include "gpio.h"
#include "sysctl.h"
#include "cpu.h"
#include "interrupt.h"

#define 	SETB_F_SDA()       	GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_PIN_4)
#define 	SETB_F_SCL()       	GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_5, GPIO_PIN_5)

#define 	CLR_F_SDA()      	GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_4, ~GPIO_PIN_4)
#define 	CLR_F_SCL()      	GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_5, ~GPIO_PIN_5)

unsigned short FM3130I2CWrData(unsigned int Addr, unsigned char *WrData, unsigned short usnCount);
void FM3130I2RdData(unsigned int Addr, unsigned char *RdData, unsigned short usnCount);
void IIC_init();
void Delay(unsigned short Num);

unsigned char ucTestData[256] = "1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef";
unsigned char ucTmp[256] = {0};


int main(void)
{  
    SysCtlClockSet(SYSCTL_SYSDIV_1 | SYSCTL_USE_OSC | SYSCTL_OSC_MAIN | SYSCTL_XTAL_7_37MHZ);      //  设置系统时钟的频率7.37MHz       
    IIC_init();
    FM3130I2CWrData(0x0, ucTestData, 256);
    FM3130I2RdData(0x0, ucTmp, 256);
    while(1);
}

void IIC_init()
{ 
    SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOG);     //给GPIOF提供时钟 
  
    GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4 | GPIO_PIN_5, GPIO_DIR_MODE_OUT);    //PG4+PG5初始全部设置为输出
    GPIOPadConfigSet(GPIO_PORTG_BASE, GPIO_PIN_4 | GPIO_PIN_5,                     //  设置强度和类型          
                       GPIO_STRENGTH_4MA,                                         // 4mA的输出驱动强度      
                       GPIO_PIN_TYPE_OD_WPU);                                        //推挽模式
}
void Delay(unsigned short Num)
{
  while(Num--);
}
unsigned short FM3130I2CWrData(unsigned int Addr, unsigned char *WrData, unsigned short usnCount)
{
                unsigned short TestData = 0;              
  
		unsigned short i = 0;
		unsigned short j = 0;
		unsigned short Tmp = 0;
		unsigned short usErrTime = 100;//因故障接收方无ACK,超时值为255。
		unsigned short Addr_H,Addr_L;
		//停止信号******************************************************************************************
			CLR_F_SCL();
                        Delay(10);
			CLR_F_SDA();
                        Delay(10);
                        SETB_F_SCL();
                        Delay(10);
			SETB_F_SDA();
                        Delay(10);
			CLR_F_SCL();
		//开始信号******************************************************************************************
			CLR_F_SCL();
                        Delay(10);
                        SETB_F_SDA();
                        Delay(10);
			SETB_F_SCL();
                        Delay(10);
			CLR_F_SDA();
                        Delay(10);
			CLR_F_SCL();
                        Delay(10);
		//从机地址******************************************************************************************
		//存储器为0xA0
                        Tmp = 160L << 8;
			for(i = 0; i < 8; i++)
			  {
			      CLR_F_SCL();
			      GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_4, Tmp >> (11 - i));
                              Delay(10);
			      SETB_F_SCL();
                              Delay(10);
			  }
			//等待ACK
                        usErrTime = 100;
			 	CLR_F_SCL();
                                Delay(10);
                                SETB_F_SCL();
                                Delay(10);
				GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN);                      //PG4置为输入
                                //TestData = GPIOPinRead(GPIO_PORTG_BASE, GPIO_PIN_4);
                                //TestData++;
			 	while(GPIOPinRead(GPIO_PORTG_BASE, GPIO_PIN_4));
					{
						usErrTime--;
						if (!usErrTime)
						{
						    CLR_F_SCL();
                                                    Delay(10);
						    //停止信号
						    CLR_F_SDA();
                                                    Delay(10);
						    CLR_F_SCL();
                                                    Delay(10);
						    SETB_F_SDA();
                                                    Delay(10);
						    SETB_F_SCL();
                                                    Delay(10);
						    GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT);                      //PG4置为输出
						    return 0x0;
						}
					}
                                  
				GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT);                      //PG4置为输出
				CLR_F_SCL();
                                Delay(10);
		//发送数据地址**************************************************************************************
				Addr_H = (Addr &0xFF00)>>8;
				Addr_L = Addr &0x0FF;	
				//高字节
				for(i = 0; i < 8; i++)
				{
				    CLR_F_SCL();
				    GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_4, (Addr_H << 8) >> (11 - i));
                                    Delay(10);
				    SETB_F_SCL();
                                    Delay(10);
				}
				//等待ACK
                                usErrTime = 100;
                                CLR_F_SCL();
                                Delay(10);
			 	SETB_F_SCL();
                                Delay(10);
				GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN);                      //PG4置为输入
			 	while(GPIOPinRead(GPIO_PORTG_BASE, GPIO_PIN_4))
					{
						usErrTime--;
						if(!usErrTime)
						{
						    CLR_F_SCL();
						    //停止信号
						    CLR_F_SDA();
                                                    Delay(10);
						    CLR_F_SCL();
                                                    Delay(10);
						    SETB_F_SDA();
                                                    Delay(10);
						    SETB_F_SCL();
                                                    Delay(10);
						    GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT);                      //PG4置为输出
						    return 0x0;
						}
					}
				GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT);                      //PG4置为输出
				CLR_F_SCL();
				//低字节
				for(i = 0; i < 8; i++)
				{
					CLR_F_SCL();
					GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_4, (Addr_L << 8) >> (11 - i));
                                        Delay(10);
					SETB_F_SCL();
                                        Delay(10);
				}
				//等待ACK
                                usErrTime = 100;
                                CLR_F_SCL();
                                Delay(10);
			 	SETB_F_SCL();
				GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN);                      //PG4置为输入
			 	while(GPIOPinRead(GPIO_PORTG_BASE, GPIO_PIN_4))
					{
						usErrTime--;
						if(!usErrTime)
						 {
							CLR_F_SCL();
                                                        Delay(10);
							//停止信号
							CLR_F_SDA();
                                                        Delay(10);
							CLR_F_SCL();
                                                        Delay(10);
							SETB_F_SDA();
                                                        Delay(10);
					 		SETB_F_SCL();
                                                        Delay(10);
						 	GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT);                      //PG4置为输出
						   return 0x0;
						 }
					}
				GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT);                      //PG4置为输出
				CLR_F_SCL();
		//发送数据******************************************************************************************
				for(j = 0; j < usnCount; j++)
					{
						Tmp = WrData[j];
                                                Tmp = Tmp << 8;
						for(i = 0; i < 8; i++)
						{
							CLR_F_SCL();
							GPIOPinWrite(GPIO_PORTG_BASE, GPIO_PIN_4, Tmp >> (11 - i));
                                                        Delay(10);
							SETB_F_SCL();
                                                        Delay(10);
						}
                                              //等待ACK
                                              usErrTime = 100;
                                              CLR_F_SCL();
                                              Delay(10);
                                              SETB_F_SCL();
                                              GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_IN);      
                                              Delay(10);
                                              while(GPIOPinRead(GPIO_PORTG_BASE, GPIO_PIN_4))
                                                      {
                                                              usErrTime--;
                                                              if(!usErrTime)
                                                                 {
                                                                      CLR_F_SCL();
                                                                      //停止信号
                                                                      CLR_F_SDA();
                                                                      Delay(10);
                                                                      CLR_F_SCL();
                                                                      Delay(10);
                                                                      SETB_F_SDA();
                                                                      Delay(10);
                                                                      SETB_F_SCL();
                                                                      Delay(10);
                                                                      GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT);                      //PG4置为输出
                                                                      return (j+1);
                                                                 }
                                                      }
                                              GPIODirModeSet(GPIO_PORTG_BASE, GPIO_PIN_4, GPIO_DIR_MODE_OUT);                      //PG4置为输出
                                              CLR_F_SCL();			
					}
		//停止信号******************************************************************************************
			CLR_F_SDA();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -