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

📄 main.c

📁 I2C接口 的RTC DS1338 在arm7上的 运用代码
💻 C
字号:
/*------------------------------------------------------------------------------------------------------
** Modified by: dongsheng	
** Modified date:
** Version: 1.0
** Descriptions:
**
********************************************************************************************************/
#include 	"config.h"
#include    "RTC.h" 


#define	  	RUN  		0x2000000		/* P0.25引脚控制 LED D11,低电平灯亮 */
		
#define  	UART_BPS	9600			/* 定义通讯波特率 */

uint8 		k=0,rev_flag=0,rcv_buf[10]={0};

/*********************************************************************************************************
** 函数名称 :IRQ_UART0()
** 函数功能 :串口0接收中断服务程序
** 入口参数 :无
** 出口参数 :无
*********************************************************************************************************/

void __irq IRQ_UART0 (void)
{
	
	if ((U0IIR & 0x0F) == 0x04)	
	{
		rcv_buf[k++] = U0RBR;		// 读取接收buffer的数据,并清除中断	
		if (k==8)
		{
			k=0;
			rev_flag =1;
		}
	}
	VICVectAddr = 0x00;			// 中断处理结束
}


/****************************************************************************
* 名称:DelayNS()
* 功能:长软件延时。
* 入口参数:dly		延时参数,值越大,延时越久
* 出口参数:无
****************************************************************************/
void  DelayNS(uint32  dly)
{  uint32  i;

   for(; dly>0; dly--) 
      for(i=0; i<5000; i++);
}


/****************************************************************************
* 名称:UART0_Ini()
* 功能:初始化串口0。设置为8位数据位,1位停止位,无奇偶校验,波特率为115200
* 入口参数:无
* 出口参数:无
****************************************************************************/
void  UART0_Init(void)
{  uint16 Fdiv;

   PINSEL0 = PINSEL0 | 0x05;
   U0LCR = 0x83;		            // DLAB = 1,可设置波特率 fifo 深度=8
   Fdiv = (Fpclk / 16) / UART_BPS;  // 设置波特率
   U0DLM = Fdiv / 256;							
   U0DLL = Fdiv % 256;						
   U0LCR = 0x03;					//	进入正常模式
   U0FCR = 0x01;					//  1个字节
   U0IER = 0x01;						// 允许RBR中断,即接收中断
	
	IRQEnable();						// 使能IRQ中断
	/* 使能UART0中断 */
	VICIntSelect = 0x00000000;			// 设置所有的通道为IRQ中断  '1'为FIQ,'0'为IRQ
	VICVectCntl0 = 0x20 | 0x06;			// UART0分配到IRQ slot10,即优先级最高
	VICVectAddr0 = (uint32)IRQ_UART0;	// 设置UART0向量地址
	VICIntEnable = 1 << 0x06;			// 使能UART0中断


}


/****************************************************************************
* 名称:UART0_SendByte()
* 功能:向串口发送字节数据,并等待发送完毕。
* 入口参数:data		要发送的数据
* 出口参数:无
****************************************************************************/
void  UART0_SendByte(uint8 data)
{  
	
   	while( (U0LSR&0x40)==0 );	    // 等待数据发送完毕
   		U0THR = data;				    // 发送数据
   		
   	if (IO0PIN & 0x2000000)			//闪灯
   		IO0CLR = RUN;
   	else
   		IO0SET = RUN;  
   			
   	DelayNS(5);
}


/****************************************************************************
* 名称:UART0_SendStr()
* 功能:向串口发送一字符串
* 入口参数:srt		要发送的字符串的指针
* 出口参数:无
****************************************************************************/
void  UART0_SendStr(uint8 const *str)
{  
	while(1)
   {  
     if( *str == '\0' ) break;
      UART0_SendByte(*str++);	    // 发送数据
   }
   
}

/****************************************************************************
* 名称:LED_FLUSH()
* 功能:让LED闪一次,然后熄灭
* 入口参数:无
* 出口参数:无
****************************************************************************/

void LED_FLUSH()
{
   	IO0SET = RUN;							// RUN = 1 
    DelayNS(100);
    IO0CLR = RUN;							// RUN = 0
    DelayNS(100);
}

/****************************************************************************
* 名称:RUNLED_Init()
* 功能:初始化控制LED的IO管脚
* 入口参数:无
* 出口参数:无
****************************************************************************/

void RUNLED_Init()
{
	PINSEL1 = PINSEL1 & 0xfff3ffff;			// 设置管脚连接GPIO   
   	IO0DIR = RUN; 							// 设置I/O为输出
}

/****************************************************************************
* 名称:main()
* 功能:串口控制RTC
* 入口参数:无
* 出口参数:无
****************************************************************************/

int  main(void)
{  	
   	uint8  i,state,t1,t2;//用于缓存相关数据
	uint8 const  SEND_STRING[] = "calender data error! please initialize them...";
   	// I2C初始化//
   	RUNLED_Init();
   	UART0_Init();
   	I2C_Init(100000);                      	// I2C初始化
  
   	rev_flag = 0;
	while(1)
   	{
   		//t1 == rtc_display(0);
   		state = rtc_display(7);
   		//t2 == rtc_display(0);
   		if(state != 0x20)
   		{
   			//if(t1!=t2)
   			//{
   				for(i=0; i<8; i++)
   				{
   					UART0_SendByte(rtc_display(i));
   				}
   			//}
   		}
   		else
		{
	   		UART0_SendStr(SEND_STRING);
	   		DelayNS(2000);
		}
		
		if(rev_flag == 1)
  		{
  			rtc_int(rcv_buf[0],rcv_buf[1],rcv_buf[2],rcv_buf[3],rcv_buf[4],rcv_buf[5],rcv_buf[6],rcv_buf[7]);
			rev_flag = 0;
		}
		DelayNS(3000);
	}
}
		

/********************************************************************************************************
                                       End Of File
********************************************************************************************************/

⌨️ 快捷键说明

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