⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 serial.c

📁 这是一个串口通信程序Serial34我已经在Linux下编译调试通过
💻 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 + -