Weight_Bed/USCIX_Init.c

359 lines
7.7 KiB
C
Raw Permalink Normal View History

2024-05-17 15:11:04 +08:00
#include "H/Function_Init.H"
//ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һģ<D2BB>
#define USCI2 2
#define USCI3 3
#define USCI4 4
#define USCI5 5
//ѡ<><D1A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һģʽ<C4A3><CABD>
#define UartX 0
#define TWIX 1
#define SPIX 2
#define USCIX_Select USCI3
#define USCIX_Mode 2
void UARTX_Init(uint Freq, unsigned long int baud);
void TWIX_Init(void);
void SPIX_Init(void);
bit UartXSendFlag = 0; //UartX<74><58><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ
bit UartXReceiveFlag = 0; //UartX<74><58><EFBFBD><EFBFBD><EFBFBD>жϱ<D0B6>־λ
bit SPIXFlag = 0; //SPIX<49><58><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ
bit TWIXFlag = 0; //TWIX<49>жϱ<D0B6>־λ
/*****************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>void USCIX_Test(void)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>USCIX<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*****************************************************/
void USCIX_Test(void)
{
USXINX = USCIX_Select; //USCIX<49>Ĵ<EFBFBD><C4B4><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>USCI
//<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>һģʽ
#if (USCIX_Mode == UartX)
{
UARTX_Init(32, 9600); //<2F><>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD>ڣ<EFBFBD><DAA3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƶ<EFBFBD>Ͳ<EFBFBD><CDB2><EFBFBD><EFBFBD><EFBFBD>
while(1)
{
USXCON3 = 0xAA; //<2F><><EFBFBD><EFBFBD>0xAA
while(!UartXSendFlag); //<2F>ȴ<EFBFBD><C8B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɱ<EFBFBD>־λ<D6BE><CEBB><EFBFBD><EFBFBD>
UartXSendFlag = 0; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD>־λ
}
}
#elif (USCIX_Mode == TWIX)
{
TWIX_Init();
while(1)
{
USXCON1 |= 0x20; //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD>
while(!TWIXFlag);
TWIXFlag = 0;
USXCON3 = 0x10; //<2F><><EFBFBD>͵<EFBFBD>ַ<EFBFBD><D6B7>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
while(!TWIXFlag);
TWIXFlag = 0;
USXCON3 = 0x55;
while(!TWIXFlag);
TWIXFlag = 0;
Delay(100);
USXCON1 |= 0x10; //<2F><><EFBFBD>ͽ<EFBFBD><CDBD><EFBFBD><EFBFBD>ź<EFBFBD>
Delay(100);
}
}
#elif (USCIX_Mode == SPIX)
{
SPIX_Init();
while(1)
{
USXCON2 = 0xAA;
while(!SPIXFlag);
SPIXFlag = 0;
Delay(1000);
}
}
#endif
}
/*****************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>void UARTX_Init(uint Freq,unsigned long int baud)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>UartX<EFBFBD>жϳ<EFBFBD>ʼ<EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Freq-<EFBFBD><EFBFBD>Ƶ<EFBFBD><EFBFBD>baud-<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*****************************************************/
void UARTX_Init(uint Freq, unsigned long int baud)
{
TMCON |= 0xC0; //<2F><><EFBFBD>нӿ<D0BD>USCIXѡ<58><D1A1>Uartͨ<74><CDA8>
#if (USCIX_Select == USCI2)
P4CON &= ~0x30;
P4PH |= 0x30;
IE2 |= 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#elif (USCIX_Select == USCI3)
P2CON &= ~0xC0;
P2PH |= 0xC0;
IE2 |= 0x04; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#elif (USCIX_Select == USCI4)
P4CON &= ~0xC0;
P4PH |= 0xC0;
IE2 |= 0x08; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#elif (USCIX_Select == USCI5)
P0CON &= ~0x0C;
P0PH |= 0x0C;
IE2 |= 0x10; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#endif
USXCON0 = 0x50; //<2F><><EFBFBD><EFBFBD>ͨ<EFBFBD>ŷ<EFBFBD>ʽΪģʽһ<CABD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
USXCON1 = Freq * 1000000 / baud; //<2F><><EFBFBD><EFBFBD><EFBFBD>ʵ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
USXCON2 = (Freq * 1000000 / baud) >> 8; //<2F><><EFBFBD><EFBFBD><EFBFBD>ʸ<EFBFBD>λ<EFBFBD><CEBB><EFBFBD><EFBFBD>
EA = 1;
}
/*****************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>void TWIX_Init(void)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>TWIX<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*****************************************************/
void TWIX_Init(void)
{
TMCON |= 0x80; //<2F><><EFBFBD>нӿ<D0BD>USCIXѡ<58><D1A1>TWIͨ<49><CDA8>
#if (USCIX_Select == USCI2)
P4CON &= ~0x18;
P4PH |= 0x18;
IE2 |= 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#elif (USCIX_Select == USCI3)
P2CON &= ~0x60;
P2PH |= 0x60;
IE2 |= 0x04; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#elif (USCIX_Select == USCI4)
P5CON &= ~0x20;
P5PH |= 0x20;
P4CON &= ~0x70;
P4PH |= 0x70;
IE2 |= 0x08; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#elif (USCIX_Select == USCI5)
P0CON &= ~0x06;
P0PH |= 0x06;
IE2 |= 0x10; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#endif
TMCON |= 0x80; //ѡ<><D1A1>TWIXģʽ
USXCON0 = 0x80; //<2F><>ģʽ<C4A3><CABD> ʹ<><CAB9>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>־λ
USXCON1 = 0x05; //---- xxxx xΪʱ<CEAA><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
IE2 |= 1 << (USCIX_Select - 1); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
EA = 1;
}
/*****************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>void SPIX_Init(void)
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>SPIX<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*****************************************************/
void SPIX_Init(void)
{
TMCON |= 0x40; //<2F><><EFBFBD>нӿ<D0BD>USCIXѡ<58><D1A1>SPIͨ<49><CDA8>
#if (USCIX_Select == USCI2)
P4CON &= ~0x38;
P4PH |= 0x38;
IE2 |= 0x02; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#elif (USCIX_Select == USCI3)
P2CON &= ~0xE0;
P2PH |= 0xE0;
IE2 |= 0x04; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#elif (USCIX_Select == USCI4)
P5CON &= ~0x20;
P5PH |= 0x20;
P4CON &= ~0xC0;
P4PH |= 0xC0;
IE2 |= 0x08; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#elif (USCIX_Select == USCI5)
P0CON &= ~0x0E;
P0PH |= 0x0E;
IE2 |= 0x10; //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
#endif
TMCON |= 0X40; //ѡ<><D1A1>SPIXģʽ
USXCON0 = 0x3F; //<2F><><EFBFBD><EFBFBD>SPIXΪ<58><CEAA><EFBFBD><EFBFBD><E8B1B8>SCK<43><4B><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1>Ϊ<EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>SCK<43><4B><EFBFBD>ڵڶ<DAB5><DAB6>زɼ<D8B2><C9BC><EFBFBD><EFBFBD>ݣ<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪFsys/128
USXCON1 = 0x01; //MSB<53><42><EFBFBD>ȷ<EFBFBD><C8B7>ͣ<EFBFBD><38><CEBB><EFBFBD><EFBFBD><E4A3AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
USXCON0 |= 0x80; //<2F><><EFBFBD><EFBFBD>SPIX
IE2 |= 1 << (USCIX_Select - 1); //<2F><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD>
EA = 1;
}
#if (USCIX_Select == USCI2)
/*****************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>void TWI2/SPI2/UART2_Int() interrupt 7
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>USCI2<EFBFBD>жϺ<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*****************************************************/
#if (USCIX_Mode == UartX)
void UART2_Int() interrupt 16 //UartX<74>жϺ<D0B6><CFBA><EFBFBD>
{
if(USXCON0 & 0x02) //<2F><><EFBFBD>ͱ<EFBFBD>־λ<D6BE>ж<EFBFBD>
{
USXCON0 &= 0xFE;
UartXSendFlag = 1;
}
if((USXCON0 & 0x01)) //<2F><><EFBFBD>ձ<EFBFBD>־λ<D6BE>ж<EFBFBD>
{
USXCON0 &= 0xFD;
UartXReceiveFlag = 1;
}
}
#elif (USCIX_Mode == TWIX)
void TWI2_Int() interrupt 16 //TWIX<49>жϺ<D0B6><CFBA><EFBFBD>
{
if(USXCON0 & 0x40)
{
USXCON0 &= 0xbf; //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
TWIXFlag = 1;
}
}
#elif (USCIX_Mode == SPIX)
void SPI2Int(void) interrupt 16 //SPIX<49>жϺ<D0B6><CFBA><EFBFBD>
{
if(USXCON1 & 0X08) //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD>־<EFBFBD>ж<EFBFBD>
{
USXCON1 &= ~0X08;
}
if(USXCON1 & 0X80) //<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE>ж<EFBFBD>
{
USXCON1 &= ~0X80;
SPIXFlag = 1;
}
}
#endif
#elif (USCIX_Select == USCI3)
/*****************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>void TWI3/SPI3/UART3_Int() interrupt 7
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>USCI2<EFBFBD>жϺ<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*****************************************************/
#if (USCIX_Mode == UartX)
void UART3_Int() interrupt 17 //UartX<74>жϺ<D0B6><CFBA><EFBFBD>
{
if(USXCON0 & 0x02) //<2F><><EFBFBD>ͱ<EFBFBD>־λ<D6BE>ж<EFBFBD>
{
USXCON0 &= 0xFE;
UartXSendFlag = 1;
}
if((USXCON0 & 0x01)) //<2F><><EFBFBD>ձ<EFBFBD>־λ<D6BE>ж<EFBFBD>
{
USXCON0 &= 0xFD;
UartXReceiveFlag = 1;
}
}
#elif (USCIX_Mode == TWIX)
void TWI3_Int() interrupt 17 //TWIX<49>жϺ<D0B6><CFBA><EFBFBD>
{
if(USXCON0 & 0x40)
{
USXCON0 &= 0xbf; //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
TWIXFlag = 1;
}
}
#elif (USCIX_Mode == SPIX)
void SPI3_Int(void) interrupt 17 //SPIX<49>жϺ<D0B6><CFBA><EFBFBD>
{
if(USXCON1 & 0X08) //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD>־<EFBFBD>ж<EFBFBD>
{
USXCON1 &= ~0X08;
}
if(USXCON1 & 0X80) //<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE>ж<EFBFBD>
{
USXCON1 &= ~0X80;
SPIXFlag = 1;
}
}
#endif
#elif (USCIX_Select == USCI4)
/*****************************************************
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ƣ<EFBFBD>void TWI4/SPI4/UART4_Int() interrupt 7
*<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD>USCI2<EFBFBD>жϺ<EFBFBD><EFBFBD><EFBFBD>
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*<EFBFBD><EFBFBD><EFBFBD>ڲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>void
*****************************************************/
#if (USCIX_Mode == UartX)
void UART4_Int() interrupt 18 //UartX<74>жϺ<D0B6><CFBA><EFBFBD>
{
if(USXCON0 & 0x02) //<2F><><EFBFBD>ͱ<EFBFBD>־λ<D6BE>ж<EFBFBD>
{
USXCON0 &= 0xFE;
UartXSendFlag = 1;
}
if((USXCON0 & 0x01)) //<2F><><EFBFBD>ձ<EFBFBD>־λ<D6BE>ж<EFBFBD>
{
USXCON0 &= 0xFD;
UartXReceiveFlag = 1;
}
}
#elif (USCIX_Mode == TWIX)
void TWI4_Int() interrupt 18 //TWIX<49>жϺ<D0B6><CFBA><EFBFBD>
{
if(USXCON0 & 0x40)
{
USXCON0 &= 0xbf; //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
TWIXFlag = 1;
}
}
#elif (USCIX_Mode == SPIX)
void SPI4_Int(void) interrupt 18 //SPIX<49>жϺ<D0B6><CFBA><EFBFBD>
{
if(USXCON1 & 0X08) //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD>־<EFBFBD>ж<EFBFBD>
{
USXCON1 &= ~0X08;
}
if(USXCON1 & 0X80) //<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE>ж<EFBFBD>
{
USXCON1 &= ~0X80;
SPIXFlag = 1;
}
}
#endif
#elif (USCIX_Select == USCI5)
#if (USCIX_Mode == UartX)
void UART5_Int() interrupt 19 //UartX<74>жϺ<D0B6><CFBA><EFBFBD>
{
if(USXCON0 & 0x02) //<2F><><EFBFBD>ͱ<EFBFBD>־λ<D6BE>ж<EFBFBD>
{
USXCON0 &= 0xFE;
UartXSendFlag = 1;
}
if((USXCON0 & 0x01)) //<2F><><EFBFBD>ձ<EFBFBD>־λ<D6BE>ж<EFBFBD>
{
USXCON0 &= 0xFD;
UartXReceiveFlag = 1;
}
}
#elif (USCIX_Mode == TWIX)
void TWI5_Int() interrupt 19 //TWIX<49>жϺ<D0B6><CFBA><EFBFBD>
{
if(USXCON0 & 0x40)
{
USXCON0 &= 0xbf; //<2F>ж<EFBFBD><D0B6><EFBFBD><EFBFBD><EFBFBD>
TWIXFlag = 1;
}
}
#elif (USCIX_Mode == SPIX)
void SPI5_Int(void) interrupt 19 //SPIX<49>жϺ<D0B6><CFBA><EFBFBD>
{
if(USXCON1 & 0X08) //<2F><><EFBFBD>ͻ<EFBFBD><CDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ձ<EFBFBD>־<EFBFBD>ж<EFBFBD>
{
USXCON1 &= ~0X08;
}
if(USXCON1 & 0X80) //<2F><><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><EFBFBD><EFBFBD>־λ<D6BE>ж<EFBFBD>
{
USXCON1 &= ~0X80;
SPIXFlag = 1;
}
}
#endif
#endif