📄 uart_int.c
字号:
//********************************************************************************************
//********************************************************************************************
//*************************** Firmware for ANX9021 ***********************************
//********************************************************************************************
//********************************************************************************************
//******************************************************************************
// ANALOGIX Company
// ANX9021 Firmware on AT89C51RC clean for customer
// Version 1.51 2006/04/27
//******************************************************************************
#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;
rx_count = 0;
tx_left = 0;
cmd_valid = 0;
ret_valid = 0;
term_cmd_valid = 0;
fetching_term_cmd = 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;
uc = 0;
if (uart_buf[0] == CMD_WRITE) {
if (uart_buf[2] == 0x60)
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] == 0x60)
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 + -