📄 super_node.c
字号:
#include "super_node.h"
#define DEFAULT_MAIN_CLK (2500000)
void delay_1ms(){//assume main clk in 2.5MHz
unsigned int i;
for(i=0;i<500;i++);
}
void init_ext_clk(){
volatile unsigned int i;
BCSCTL1 &= ~XT2OFF; // XT2= HF XTAL
do
{
IFG1 &= ~OFIFG; // Clear OSCFault flag
for (i = 0xFF; i > 0; i--); // Time for flag to set
}
while ((IFG1 & OFIFG)); // OSCFault flag still set?
BCSCTL2 |= SELS;//SMCLK=2.5MHz
}
void select_main_clk(unsigned char type){
switch(type){
case MCLK_DCOCLK:
BCSCTL2 &= 0x3f;
break;
case MCLK_XT2CLK:
BCSCTL2 &= 0x3f;
BCSCTL2 |= SELM1;
break;
case MCLK_LFXTCLK:
BCSCTL2 |= SELM1+SELM0;
break;
}
}
//2400 9600 19200 38400 57600 115200
unsigned char UBR0_Array[] ={0x0D,0x03,0x82,0x41,0x2B,0x15};
unsigned char UBR1_Array[] ={0x00,0x00,0x00,0x00,0x00,0x00};
unsigned char UMCTL_Array[]={0x6D,0x29,0x84,0x10,0x29,0x5B};
FP usb_uart_rx_fp=NULL_FP;
void enable_usb_uart(unsigned char speed,FP rx_fp){
P3SEL |= 0xC0; // P3.6,7 = USART1 TXD/RXD
ME2 |= UTXE1 + URXE1; // Enable USART1 TXD/RXD
UCTL1 |= CHAR; // 8-bit character
switch(speed){
case SPD_2400:
case SPD_9600:
U1TCTL_bit.SSEL0=1; // UCLK = ACLK
U1TCTL_bit.SSEL1=0;
break;
case SPD_19200:
case SPD_38400:
case SPD_57600:
case SPD_115200:
U1TCTL_bit.SSEL0=1; // UCLK = SMCLK
U1TCTL_bit.SSEL1=1;
break;
}
UBR01 = UBR0_Array[speed];
UBR11 = UBR1_Array[speed];
UMCTL1 = UMCTL_Array[speed];
UCTL1 &= ~SWRST; // Initialize USART state machine
usb_uart_rx_fp=rx_fp;
if(usb_uart_rx_fp!=NULL_FP){
IE2 |= URXIE1; // Enable USART1 RX interrupt
}
}
#pragma vector=UART1RX_VECTOR
__interrupt void usart1_rx (void)
{
if(usb_uart_rx_fp!=NULL_FP){
usb_uart_rx_fp();
}
}
FP rs232_uart_rx_fp=NULL_FP;
void enable_rs232_uart(unsigned char speed,FP rx_fp){
P3SEL |= 0x30; // P3.4,5 = USART0 TXD/RXD
ME1 |= UTXE0 + URXE0; // Enable USART0 TXD/RXD
UCTL0 |= CHAR; // 8-bit character
switch(speed){
case SPD_2400:
case SPD_9600:
U0TCTL_bit.SSEL0=1; // UCLK = ACLK
U0TCTL_bit.SSEL1=0;
break;
case SPD_19200:
case SPD_38400:
case SPD_57600:
case SPD_115200:
U0TCTL_bit.SSEL0=1; // UCLK = SMCLK
U0TCTL_bit.SSEL1=1;
break;
}
UBR00 = UBR0_Array[speed]; // 32k/9600 - 3.41
UBR10 = UBR1_Array[speed]; //
UMCTL0 = UMCTL_Array[speed]; // Modulation
UCTL0 &= ~SWRST; // Initialize USART state machine
rs232_uart_rx_fp=rx_fp;
if(rs232_uart_rx_fp!=NULL_FP){
IE1 |= URXIE0; // Enable USART0 RX interrupt
}
}
#pragma vector=UART0RX_VECTOR
__interrupt void usart0_rx (void)
{
if(rs232_uart_rx_fp!=NULL_FP){
rs232_uart_rx_fp();
}
}
FP user_isr_function=NULL_FP;
void setup_user_interrupt(FP rx_fp){
if(rx_fp==NULL_FP){
P2IE_bit.P2IE_7=0;
return;
}
P2DIR_bit.P2DIR_7=0;
P2IES_bit.P2IES_7=1;
P2IFG_bit.P2IFG_7=0;
P2IE_bit.P2IE_7=1;
}
#pragma vector=PORT2_VECTOR
__interrupt void IO_PORT2_EDGE (void){
P2IFG_bit.P2IFG_7=0;
if(user_isr_function!=NULL_FP){
user_isr_function();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -