?? lpc_rtc.c
字號:
/****************************************Copyright (c)**************************************************
**
** 北天星國際有限公司
** http://www.po-star.com
**
*******************************************************************************************************
**文件名稱:LPC_RTC.C
**功能:運行RTC進行計時,并將所時間值不斷的通過串口向上位機發送。
每2秒LED1和LED2閃爍一次
**說明:把JP2連接上。
**------------------------------------------------------------------------------------------------------
********************************************************************************************************/
#include "..\inc\config.h"
#define UART_BPS 9600
U8 Send_BUF[16]; // UART0數據接收緩沖區
/*************************串口0初始化******************************************/
void UART0_Init ()
{
U16 Fdiv;
U0LCR = 0x83; // DLAB = 1,可設置波特率
Fdiv =(Fpclk/16)/UART_BPS;
U0DLL = Fdiv%256;
U0DLM = Fdiv/256;
U0LCR = 0x03;
}
/*************************向串口0發送數據******************************************/
void UART0_PutChar ( U8 data)
{
U0THR = data; // 發送數據
while( (U0LSR&0x40)==0 ); // 等待數據發送完畢
}
/***********************將緩沖區的數據發送回主機*********************************/
void ISendBuf(U8 const *buf, U8 no)
{
U8 i;
for(i=0; i<no; i++) UART0_PutChar(buf[i]);
}
/****************************************************************************
**讀取RTC的時間值,并將讀出的時分秒值由串口發送到上位機顯示。
****************************************************************************/
void SendTimeRtc(void)
{
U8 const MESSAGE[]= "RTC Time is : ";
U32 times;
U8 bak;
times = CTIME0; // 讀取完整時鐘寄存器0
bak = (times>>16)&0x1F; // 取得時的值
Send_BUF[0] = bak/10+'0';
Send_BUF[1] = bak%10+'0';
Send_BUF[2] = ':';
bak = (times>>8)&0x3F; // 取得分的值
Send_BUF[3] = bak/10+'0';
Send_BUF[4] = bak%10+'0';
Send_BUF[5] = ':';
bak = times&0x3F; // 取得秒的值
Send_BUF[6] = bak/10+'0';
Send_BUF[7] = bak%10+'0';
Send_BUF[8] = '\n';
ISendBuf(MESSAGE, 14); // 發送數據
ISendBuf(Send_BUF, 9);
}
/********************初始化實時時鐘*******************************************/
void RTCInit(void)
{
YEAR = 2006; // 初化年
MONTH = 03; // 初化月
DOM = 2; // 初化日
HOUR = 12;
MIN = 00;
SEC = 00;
CIIR = 0x01; // 設置秒值的增量產生一次中斷
CCR = 0x11; // 使用獨立振蕩器,啟動RTC
}
void PLL_Init(void)
{
PLLCON = 1;
#if ((Fcclk / 4) / Fpclk) == 1
VPBDIV = 0;
#endif
#if ((Fcclk / 4) / Fpclk) == 2
VPBDIV = 2;
#endif
#if ((Fcclk / 4) / Fpclk) == 4
VPBDIV = 1;
#endif
PLLCFG = ((Fcclk / Fosc) - 1) | (0 << 5);
#endif
#if (Fcco / Fcclk) == 4
PLLCFG = ((Fcclk / Fosc) - 1) | (1 << 5);
#endif
#if (Fcco / Fcclk) == 8
PLLCFG = ((Fcclk / Fosc) - 1) | (2 << 5);
#endif
#if (Fcco / Fcclk) == 16
PLLCFG = ((Fcclk / Fosc) - 1) | (3 << 5);
#endif
PLLFEED = 0xaa;
PLLFEED = 0x55;
while((PLLSTAT & (1 << 10)) == 0);
PLLCON = 3;
PLLFEED = 0xaa;
PLLFEED = 0x55;
}
/****************************************************************************
**主函數:讀取實時時鐘的值,并從串口發送出去。
****************************************************************************/
void main(void)
{
PINSEL0 |= 0x00050005; // 設置I/O連接到UART0
PINSEL1 = 0x00000000;
IO0DIR = LED_MASK; // 設置LED1控制口為輸出,其它I/O為輸入
// PLL_Init();
UART0_Init();
U1FCR = 0x01; // 使能FIFO
RTCInit(); // 初始化RTC
while (1 )
{
IO0SET = LED_MASK; // 熄滅LED
while( (ILR&0x01)==0 ); // 等待RTC增量中斷標志
ILR = 0x01; // 清除中斷標志
SendTimeRtc(); // 讀取時鐘值,并向UART0發送
IO0CLR = LED_MASK; // 點亮LED
while( (ILR&0x01)==0 );
ILR = 0x01;
SendTimeRtc();
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -