📄 main.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 + -