📄 uart_int.c
字号:
// *******************************************
// *******************************************
#include <stdio.h>
#include "uart_int.h"
#include "i2c_intf.h"
#include "mcu.h"
char command_buf[16];
char command_buf_len;
bit term_cmd_valid;
bit fetching_term_cmd;
unsigned char uart_buf[7];
char rx_count;
char tx_left;
bit cmd_valid;
bit ret_valid;
void init_serial(unsigned char mode)
{
/*TH1 = mode;
//TL1 = 0xff;
TMOD = TMOD & 0x0f | 0x20;
TR1 = 1;
SCON = 0x50;//0x70;
TI = 1;
RI = 0;
ES = 1;*/
//lllll, 19200 baud rate
SCON=0x50; // select BRG as UART Baud Rate Gen
SSTAT=0x00; // separate Rx / Tx interrupts
BRGCON=0x00;
BRGR0=0x70; // setup BRG for 19200 baud @ 7.373(7372800)MHz internal RC oscillator
BRGR1=0x01;
BRGCON = 0x03; // enable BRG
rx_count = 0;
tx_left = 0;
cmd_valid = 0;
ret_valid = 0;
term_cmd_valid = 0;
fetching_term_cmd = 0;
}
//函数来自UartI2c,变量取DPDEMO
void UART_ISR(void)
{
uchar temp;
if(RI==1)
{
RI = 0;//
temp=SBUF;
LED=~LED;
//sendRQ = 1;
if(command_buf_len==0 && temp==0x2a)
{
command_buf[command_buf_len++]=temp;
}
else if(command_buf_len>0 && command_buf_len<5)
{
command_buf[command_buf_len++]=temp;
}
else if(command_buf_len==5 && temp==0x0d)
{
command_buf[5]=0x0d;
command_buf_len=0;
sendRQ = 1;
}
else
{
command_buf_len=0;
}
}
}
/*
void prot_isr(void)
{
unsigned char c;
if (TI) {
TI = 0;
if (ret_valid)
if (tx_left)
SBUF = uart_buf[--tx_left];
else
ret_valid = 0;
}
if (RI)
{
enable_debug_output = 0;
RI = 0;
c = SBUF;
if (fetching_term_cmd)
{
if (c == '\n' || c == '\r')
{
term_cmd_valid = 1;
fetching_term_cmd = 0;
}
else if (c == 0x08)
command_buf_len--;
else if (command_buf_len < TERM_CMD_SIZE-1)
{
command_buf[command_buf_len++] = c;
}
else
c = '*';
enable_debug_output = 1;
if (c == '\r')
putchar('\n');
else
putchar(c);
enable_debug_output = 0;
}
else
{
if ((rx_count != 0) || (c == CMD_READ) || (c == CMD_WRITE))
uart_buf[rx_count++] = c;
if (rx_count == 7)
{
cmd_valid = 1;
rx_count = 0;
}
if (c == '\\')
{
fetching_term_cmd = 1;
command_buf_len = 0;
enable_debug_output = 1;
putchar(c);
enable_debug_output = 0;
}
}
}
}
*/
void send_return(unsigned char status, unsigned char datah,
unsigned char datal)
{
uart_buf[2] = status;
uart_buf[1] = datah;
uart_buf[0] = datal;
tx_left = 3;
SBUF = RET_ID;
ret_valid = 1;
}
void process_cmd(void)
{
char c;
unsigned char uc;
B_puts("aaaaaaa");
uc = 0;
if (uart_buf[0] == CMD_WRITE) {
if (uart_buf[2] == PORT0_ADDR)
c = i2c_write_p0_reg(uart_buf[4], uart_buf[6]);
else
c = i2c_write_p1_reg(uart_buf[4], uart_buf[6]);
} else if (uart_buf[0] == CMD_READ) {
if (uart_buf[2] == PORT0_ADDR)
c = i2c_read_p0_reg(uart_buf[4], &uc);
else
c = i2c_read_p1_reg(uart_buf[4], &uc);
}
switch (c) {
case 1:
c = ST_DEV_UNKNOWN;
break;
case 2:
c = ST_REG_UNKNOWN;
break;
}
send_return(c, 0x00, uc);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -