📄 ini.c
字号:
typedef unsigned char uchar;
typedef unsigned int uint;
#include "config.h"
#include "pin.h"
#include "LPC2294.h"
#include "extern.h"
#include "PubFunc.h"
extern void InitIrq(void);
typedef struct UartMode
{
uint8 datab; // 字长度,5/6/7/8可选
uint8 stopb; // 停止位,1/2可选
uint8 parity; // 奇偶校验位,0-无校验,1-奇校验,2-偶校验
}UARTMODE;
void RTCInit (void)
{
PREINT = Fpclk / 32768 - 1; // 设置基准时钟分频器
PREFRAC = Fpclk - (Fpclk / 32768) * 32768;
CIIR = 0x01; // 设置秒值的增量产生1次中断
ILR = 0x03; // 清除RTC增量和报警中断标志
CCR = 0x11; // 启动RTC
}
int8 UART0_Init (uint32 baud, UARTMODE set)
{
uint32 bak;
/* 参数过滤 */
if ((baud ==0 ) || (baud > 115200)) return (0);
if ((set.datab <5) || (set.datab > 8)) return (0);
if ((set.stopb == 0) || (set.stopb > 2)) return (0);
if (set.parity > 4) return (0);
/* 设置串口波特率 */
U0LCR = 0x80; // DLAB = 1
bak = (Fpclk >> 4) / baud;
U0DLM = bak >> 8;
U0DLL = bak & 0xFF;
/* 设置串口模式 */
bak = set.datab - 5; // 设置字长
if (set.stopb == 2) bak |= 0x04; // 判断是否为2位停止位
if (set.parity != 0)
{
set.parity = set.parity - 1;
bak |= 0x08;
}
bak |= set.parity << 4; // 设置奇偶校验
U0LCR = bak;
return (1);
}
int8 UART1_Init (uint32 baud, UARTMODE set)
{
uint32 bak;
/* 参数过滤 */
if ((baud ==0 ) || (baud > 115200)) return (0);
if ((set.datab <5) || (set.datab > 8)) return (0);
if ((set.stopb == 0) || (set.stopb > 2)) return (0);
if (set.parity > 4) return (0);
/* 设置串口波特率 */
U1LCR = 0x80; // DLAB = 1
bak = (Fpclk >> 4) / baud;
U1DLM = bak >> 8;
U1DLL = bak & 0xFF;
/* 设置串口模式 */
bak = set.datab - 5; // 设置字长
if (set.stopb == 2) bak |= 0x04; // 判断是否为2位停止位
if (set.parity != 0)
{
set.parity = set.parity - 1;
bak |= 0x08;
}
bak |= set.parity << 4; // 设置奇偶校验
U1LCR = bak;
return (1);
}
void mcu_init(void)
{
UARTMODE set;
PINSEL0 = (5 << 0) | (5 << 16); // 两个串口使能
PINSEL1 = ( 1 << 12)|( 1 << 13)|(0x400);
PINSEL2 = PINSEL2 & (~0x08); // P1[25:16]连接GPIO
IO0DIR = (LCD_RW|LCD_A0 | SAM_V | SAM2_RST | SAM2_IO | SAM1_RST | SAM1_IO | LCD_BKL | LED_DOWN | LED_UP
|RC530_MOSI | RC530_RST | AT45DB_CS | RC530_NSS | FM1 | LCD_E1 | LCD_E2 | U_CS);
IO1DIR = (LCD_DB0 | RC530_CLK | LCD_DB1 | LCD_DB2 | LCD_DB3 | LCD_DB4 | LCD_DB5 | LCD_DB6 | LCD_DB7);
IO0SET = (LCD_RW|LCD_A0 | SAM_V | AT45DB_CS | SAM2_RST | SAM2_IO | SAM1_RST | SAM1_IO /*| LCD_led */| LED_DOWN | LED_UP
|RC530_MOSI | RC530_RST | RC530_NSS | FM1 | LCD_E1 | LCD_E2);
IO0CLR = LCD_BKL | FM1;
IO1SET = (LCD_DB0 | RC530_CLK | LCD_DB1 | LCD_DB2 | LCD_DB3 | LCD_DB4 | LCD_DB5 | LCD_DB6 | LCD_DB7);
set.datab = 8;
set.stopb = 1;
set.parity = 0;
UART0_Init(38400, set); // 串口初始化
UART1_Init(9600,set);
InitIrq();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -