📄 serial.c
字号:
/**************************************************************************
*
* serial.c
*
* elvis.deng@sdrcomm.biz
*
* serial communication
*
**************************************************************************/
#include "common.h"
#include <kodiac.h>
#include "kodiacdefs.h"
#include <proctiming.h>
#include <pthread.h>
#include <time.h>
void serial_init()
{
pthread_t tSerialThreadTx;
int nCtlReg;
// pthread_mutex_init(&mutex,NULL);
nCtlReg = SI_CONTROL_RX_ENABLE | SI_CONTROL_TX_ENABLE;
nCtlReg |= (SERIAL_BITS_PER_CHAR - 5) << SI_CONTROL_BITS_PER_CHAR_SHIFT;
kodiac[si_control] = nCtlReg;
kodiac[si_divisor] = ONE_SEC / (16 * SERIAL_BAUD_RATE);
InitBufferTX(g_szBufferTx,TX_BUFFER_MAXSIZE);
pthread_create(&tSerialThreadTx,NULL,SerialThreadTx, NULL);
}
void InitBufferTX(LinkQueue *Q, int MaxSize)
{
QueuePtr p;
QueuePtr q;
int i;
pthread_mutexattr_t attr;
Q=calloc(sizeof(LinkQueue),1);
pthread_mutexattr_settype(&attr,PTHREAD_MUTEX_RECURSIVE);
pthread_mutex_init(&BufferTx,&attr);
pthread_mutexattr_destroy(&attr);
p = (QueuePtr)malloc(sizeof(QNode));
for(i = MaxSize-1; i > 0; i--){
q = (QueuePtr)malloc(sizeof(QNode));
q->next = p;
p = q;
}
Q->front = p;
Q->rear = p;
}
void BufferTx(LinkQueue *Q, char *Tx)
{
int i = 0;
while(Tx[i]){
Q->rear->data = Tx[i];
printf("elvis,%c",Q->rear->data);
Q->rear = Q->rear->next;
i++;
}
}
void *SerialThreadTx(void * pArg)
{
while(1) {
while (g_szBufferTx->front!=g_szBufferTx->rear) {
if (!GET_TX_FIFO_LEVEL) {
kodiac[si_tx_buffer] = g_szBufferTx->front->data;
printf("elvis,%c",g_szBufferTx->front->data);
g_szBufferTx->front = g_szBufferTx->front->next;
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -