📄 exchange.c
字号:
#include "PSoCApi.h"
#include <m8c.h>
#include "exchange.h"
#include "stdlib.h"
#include "utils.h"
#define BIM_CONTROL_PORT PRT1DR
#define BIM_TX_SEL_BIT 3
#define BIM_RX_SEL_BIT 2
#define TX_FUNCTION_REG_MODE1_BIT 4
#define START_BYTE 'S'
#define STOP_BYTE 'P'
#define XOR_MASK 0x00
#define INDEX_START_BYTE -1
#define INDEX_COMPLETE -2
volatile CHAR tx_index = INDEX_COMPLETE;
BYTE tx_count = 0;
BYTE *tx_buffer;
const char hex_table [] =
{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
void Echange_Stop(void)
{
TX_SERIAL_Stop();
Baud_Start();
}
void Exchange_SendBuf(char *p_tx, BYTE count)
{
while (INDEX_COMPLETE != tx_index);
tx_count = count << 1;
tx_buffer = p_tx;
tx_index = INDEX_START_BYTE;
}
void Exchange_Start(void)
{
Baud_Start();
CLEARBIT(TX_SERIAL_FUNC_REG, TX_FUNCTION_REG_MODE1_BIT); //set TX reg empty interrupt
TX_SERIAL_Start(TX8_PARITY_NONE);
tx_index = INDEX_COMPLETE;
TX_SERIAL_EnableInt();
TX_SERIAL_TX_BUFFER_REG = XOR_MASK;
}
void Exchange_Stop(void)
{
TX_SERIAL_DisableInt();
TX_SERIAL_Stop();
}
#pragma interrupt_handler TX_SERIAL_handler;
void TX_SERIAL_handler (void)
{
if (INDEX_COMPLETE == tx_index)
{
TX_SERIAL_TX_BUFFER_REG = XOR_MASK;
}
else
if (INDEX_START_BYTE == tx_index)
{
TX_SERIAL_TX_BUFFER_REG = XOR_MASK ^ START_BYTE;
tx_index++;
}
else
if (tx_index < tx_count)
{
TX_SERIAL_TX_BUFFER_REG = XOR_MASK ^((tx_index & 0x01) ?
(hex_table[tx_buffer[tx_index >> 1] & 0x0F]):((hex_table[tx_buffer[tx_index >>1] >> 4])));
tx_index++;
}
else
if (tx_index == tx_count)
{
TX_SERIAL_TX_BUFFER_REG = XOR_MASK ^ STOP_BYTE;
tx_index++;
}
else
if (tx_index == (tx_count+1))
{
tx_index = INDEX_COMPLETE;
TX_SERIAL_TX_BUFFER_REG = XOR_MASK;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -