321 lines
8.2 KiB
C
321 lines
8.2 KiB
C
/********************************************************************************
|
||
Copyright (C), Sinowealth Electronic. Ltd.
|
||
Author: Sino
|
||
Version: V0.0
|
||
Date: 2020/04/26
|
||
History:
|
||
V2.0 2020/04/26 Preliminary
|
||
********************************************************************************/
|
||
#include "Main.h"
|
||
|
||
|
||
#if (UART0_DEFINE != 0)
|
||
/*************************************************************************************************
|
||
* 函数名: UART0Init
|
||
* 参 数: Bps: UART通讯波特率
|
||
* 返回值: 无
|
||
* 描 述: 初始化UART0模块
|
||
*************************************************************************************************/
|
||
void UART0Init(void)
|
||
{
|
||
#if UART0_DEFINE == 1
|
||
UART0CR = 0x32;
|
||
#elif UART0_DEFINE == 2
|
||
UART0CR = 0x42;
|
||
#elif UART0_DEFINE == 3
|
||
UART0CR = 0x52;
|
||
#elif UART0_DEFINE == 4
|
||
UART0CR = 0x02;
|
||
#elif UART0_DEFINE == 5
|
||
UART0CR = 0x12;
|
||
#elif UART0_DEFINE == 6
|
||
UART0CR = 0x23;
|
||
#elif UART0_DEFINE == 7
|
||
UART0CR = 0x43;
|
||
#elif UART0_DEFINE == 8
|
||
UART0CR = 0x53;
|
||
#elif UART0_DEFINE == 9
|
||
UART0CR = 0x03;
|
||
#elif UART0_DEFINE == 10
|
||
UART0CR = 0x13;
|
||
#elif UART0_DEFINE == 11
|
||
UART0CR = 0x24;
|
||
#elif UART0_DEFINE == 12
|
||
UART0CR = 0x34;
|
||
#elif UART0_DEFINE == 13
|
||
UART0CR = 0x54;
|
||
#elif UART0_DEFINE == 14
|
||
UART0CR = 0x04;
|
||
#elif UART0_DEFINE == 15
|
||
UART0CR = 0x14;
|
||
#elif UART0_DEFINE == 16
|
||
UART0CR = 0x25;
|
||
#elif UART0_DEFINE == 17
|
||
UART0CR = 0x35;
|
||
#elif UART0_DEFINE == 18
|
||
UART0CR = 0x45;
|
||
#elif UART0_DEFINE == 19
|
||
UART0CR = 0x05;
|
||
#elif UART0_DEFINE == 20
|
||
UART0CR = 0x15;
|
||
#elif UART0_DEFINE == 21
|
||
UART0CR = 0x30;
|
||
#elif UART0_DEFINE == 22
|
||
UART0CR = 0x40;
|
||
#elif UART0_DEFINE == 23
|
||
UART0CR = 0x50;
|
||
#elif UART0_DEFINE == 24
|
||
UART0CR = 0x20;
|
||
#elif UART0_DEFINE == 25
|
||
UART0CR = 0x10;
|
||
#elif UART0_DEFINE == 26
|
||
UART0CR = 0x31;
|
||
#elif UART0_DEFINE == 27
|
||
UART0CR = 0x41;
|
||
#elif UART0_DEFINE == 28
|
||
UART0CR = 0x51;
|
||
#elif UART0_DEFINE == 29
|
||
UART0CR = 0x01;
|
||
#elif UART0_DEFINE == 30
|
||
UART0CR = 0x21;
|
||
#else
|
||
#Error: "UART0_DEFINE ERROR"
|
||
#endif
|
||
{
|
||
U16 TempVal;
|
||
PCON = 0x00;
|
||
SCON = 0x50; //配置Uart工作在模式1
|
||
// SBRTH = UART_BPS_H;
|
||
// SBRTL = UART_BPS_L;
|
||
// SFINE = UART_BPS_F;
|
||
|
||
TempVal = 32768 - (U16)(8000000 / 16 / 9600); //计算公式:(int)X=FSY/(16*波特率) ; SBRT=32768-X ; SFINE=(FSY/波特率)-16*X FSY=24M
|
||
SBRTH = TempVal / 256;
|
||
SBRTL = TempVal % 256;
|
||
SFINE = (float)8000000 / 9600 - (16 * (32768 - TempVal));
|
||
|
||
SBRTH |= 0x80; //使能波特率发生器
|
||
SADDR = UART_SLAVE_SADDR; //UART地址初始化,默认为0x0A
|
||
SADEN = 0xFF;
|
||
}
|
||
}
|
||
|
||
|
||
/*************************************************************************************************
|
||
* 函数名: InterruptUART0
|
||
* 参 数: 无
|
||
* 返回值: 无
|
||
* 描 述: UART0中断处理
|
||
*************************************************************************************************/
|
||
void InterruptUART0(void) interrupt 4
|
||
{
|
||
U8 xdata RxData;
|
||
|
||
_push_(INSCON);
|
||
McuBank0Sel();
|
||
|
||
if(RI) //RT1 interrupt means MCU recept data though UART
|
||
{
|
||
RI = 0;
|
||
RxData = SBUF;
|
||
InterruptUart0AppRx(RxData); //中颖协议
|
||
}
|
||
|
||
if(TI)
|
||
{
|
||
TI = 0;
|
||
InterruptUart0AppTx(); //中颖协议
|
||
|
||
}
|
||
|
||
_pop_(INSCON);
|
||
}
|
||
#endif
|
||
|
||
|
||
#if (UART1_DEFINE != 0)
|
||
/*************************************************************************************************
|
||
* 函数名: UART1Init
|
||
* 参 数: Bps: UART通讯波特率
|
||
* 返回值: 无
|
||
* 描 述: 初始化UART1模块
|
||
*************************************************************************************************/
|
||
void UART1Init(void)
|
||
{
|
||
// U16 TempVal;
|
||
|
||
_push_(INSCON);
|
||
McuBank0Sel();
|
||
#if UART1_DEFINE == 1
|
||
UART1CR = 0x10;
|
||
#elif UART1_DEFINE == 2
|
||
UART1CR = 0x40;
|
||
#elif UART1_DEFINE == 3
|
||
UART1CR = 0x50;
|
||
#elif UART1_DEFINE == 4
|
||
UART1CR = 0x20;
|
||
#elif UART1_DEFINE == 5
|
||
UART1CR = 0x30;
|
||
#elif UART1_DEFINE == 6
|
||
UART1CR = 0x01;
|
||
#elif UART1_DEFINE == 7
|
||
UART1CR = 0x41;
|
||
#elif UART1_DEFINE == 8
|
||
UART1CR = 0x51;
|
||
#elif UART1_DEFINE == 9
|
||
UART1CR = 0x21;
|
||
#elif UART1_DEFINE == 10
|
||
UART1CR = 0x31;
|
||
#elif UART1_DEFINE == 11
|
||
UART1CR = 0x04;
|
||
#elif UART1_DEFINE == 12
|
||
UART1CR = 0x14;
|
||
#elif UART1_DEFINE == 13
|
||
UART1CR = 0x54;
|
||
#elif UART1_DEFINE == 14
|
||
UART1CR = 0x24;
|
||
#elif UART1_DEFINE == 15
|
||
UART1CR = 0x34;
|
||
#elif UART1_DEFINE == 16
|
||
UART1CR = 0x05;
|
||
#elif UART1_DEFINE == 17
|
||
UART1CR = 0x15;
|
||
#elif UART1_DEFINE == 18
|
||
UART1CR = 0x45;
|
||
#elif UART1_DEFINE == 19
|
||
UART1CR = 0x25;
|
||
#elif UART1_DEFINE == 20
|
||
UART1CR = 0x35;
|
||
#elif UART1_DEFINE == 21
|
||
UART1CR = 0x02;
|
||
#elif UART1_DEFINE == 22
|
||
UART1CR = 0x12;
|
||
#elif UART1_DEFINE == 23
|
||
UART1CR = 0x42;
|
||
#elif UART1_DEFINE == 24
|
||
UART1CR = 0x52;
|
||
#elif UART1_DEFINE == 25
|
||
UART1CR = 0x32;
|
||
#elif UART1_DEFINE == 26
|
||
UART1CR = 0x03;
|
||
#elif UART1_DEFINE == 27
|
||
UART1CR = 0x13;
|
||
#elif UART1_DEFINE == 28
|
||
UART1CR = 0x43;
|
||
#elif UART1_DEFINE == 29
|
||
UART1CR = 0x53;
|
||
#elif UART1_DEFINE == 30
|
||
UART1CR = 0x23;
|
||
#else
|
||
#Error: "UART1_DEFINE ERROR"
|
||
#endif
|
||
{
|
||
McuBank1Sel();
|
||
PCON1 = 0x00;
|
||
SCON1 = 0x50; //配置Uart工作在模式1
|
||
SBRTH1 = UART_BPS_H;
|
||
SBRTL1 = UART_BPS_L;
|
||
SFINE1 = UART_BPS_F;
|
||
SBRTH1 |= 0x80; //使能波特率发生器
|
||
SADDR1 = UART_SLAVE_SADDR; //UART地址初始化,默认为0x0A
|
||
SADEN1 = 0xFF;
|
||
McuBank0Sel();
|
||
}
|
||
_pop_(INSCON);
|
||
|
||
|
||
}
|
||
|
||
|
||
/*************************************************************************************************
|
||
* 函数名: InterruptUart1
|
||
* 参 数: 无
|
||
* 返回值: 无
|
||
* 描 述: UART1接收和发送中断服务程序
|
||
InterruptUart1AppRx(RxData),调用APP层的接收中断处理函数
|
||
InterruptUart1AppTx(),调用APP层的发送中断处理函数
|
||
*************************************************************************************************/
|
||
void InterruptUart1(void) interrupt 15
|
||
{
|
||
U8 xdata RxData;
|
||
|
||
_push_(INSCON);
|
||
McuBank1Sel();
|
||
|
||
if(RI1)
|
||
{
|
||
RI1 = 0;
|
||
RxData = SBUF1;
|
||
McuBank0Sel(); //调用APP函数之前,将寄存器切换到BANK0
|
||
InterruptUart1AppRx(RxData);
|
||
}
|
||
McuBank1Sel();
|
||
if(TI1)
|
||
{
|
||
TI1 = 0;
|
||
McuBank0Sel(); //调用APP函数之前,将寄存器切换到BANK0
|
||
InterruptUart1AppTx();
|
||
}
|
||
|
||
_pop_(INSCON);
|
||
}
|
||
#endif
|
||
|
||
#if (UART2_DEFINE != 0)
|
||
/*************************************************************************************************
|
||
* 函数名: UART2Init
|
||
* 参 数: Bps: UART通讯波特率
|
||
* 返回值: 无
|
||
* 描 述: 初始化UART2模块
|
||
*************************************************************************************************/
|
||
void UART2Init(void)
|
||
{
|
||
{
|
||
McuBank1Sel();
|
||
PCON2 = 0x00;
|
||
SCON2 = 0x50; //配置Uart工作在模式1
|
||
SBRTH2 = UART_BPS_H;
|
||
SBRTL2 = UART_BPS_L;
|
||
SFINE2 = UART_BPS_F;
|
||
SBRTH2 |= 0x80; //使能波特率发生器
|
||
SADDR2 = UART_SLAVE_SADDR; //UART地址初始化,默认为0x0A
|
||
SADEN2 = 0xFF;
|
||
McuBank0Sel();
|
||
}
|
||
}
|
||
|
||
/*************************************************************************************************
|
||
* 函数名: InterruptUart2
|
||
* 参 数: 无
|
||
* 返回值: 无
|
||
* 描 述: UART2接收和发送中断服务程序
|
||
InterruptUart2AppRx(RxData),调用APP层的接收中断处理函数
|
||
InterruptUart2AppTx(),调用APP层的发送中断处理函数
|
||
*************************************************************************************************/
|
||
void InterruptUart2(void) interrupt 16
|
||
{
|
||
U8 xdata RxData;
|
||
|
||
_push_(INSCON);
|
||
McuBank1Sel();
|
||
|
||
if(RI2)
|
||
{
|
||
RI2 = 0;
|
||
RxData = SBUF2;
|
||
McuBank0Sel(); //调用APP函数之前,将寄存器切换到BANK0
|
||
InterruptUart2AppRx(RxData);
|
||
}
|
||
McuBank1Sel();
|
||
if(TI2)
|
||
{
|
||
TI2 = 0;
|
||
McuBank0Sel(); //调用APP函数之前,将寄存器切换到BANK0
|
||
InterruptUart2AppTx();
|
||
}
|
||
|
||
_pop_(INSCON);
|
||
}
|
||
#endif
|
||
|