P/ECE用 拡張COMポート非同期シリアル通信ドライバ 仮公開中

by しまりす

P/ECEのEXT端子を使った非同期シリアル通信のドライバです。送受信用に独立したバッファをもち、それぞれ割り込みで動作しています。P/ECE付属のテクニカルマニュアルに書いてある通りにプログラムしてるだけで、特に変わった事はしていないつもりです。

ローカルエコー(EXTの7,8pinを短絡させた状態)で動作確認しました。

DOWNLOAD

ver 1.02 serial.h serial.c stest.c(動作テスト用)

serial.cをコンパイルするときは、-I/usr/piece/sysdev/pcekn オプションをつけてください。とりあえず動くはずですが、問題があったら是非お知らせください。

ver 1.02 2003/11/26 分周比を1/16に変える設定を追加。COMPutchが送信再開する条件を、「送信割り込みが禁止状態になっていること」に変更。
ver 1.01 2003/11/23 COM_BPS定数から600bpsを削除し、1200bps以降ひとつずつずれていたのを修正。
ver 1.00 2003/11/22 公開開始

制限事項

API

void COMOpen(int mode,int bps) 通信条件 modeと通信速度 bpsを与えてシリアルポートをオープンし、受信を開始します。
通信条件はデータのビット長、ストップビット長、パリティを | 演算子でつないで設定します。N81に設定する場合は COM_PNONE | COM_8BIT | COM_STOP1 となります。詳細はserial.hを参照してください。
int COMGetch(void) データを一文字受信します。受信バッファが空だった場合はCOM_EMPTYが返ってきます。受信動作自体は割り込み処理されているので、ユーザは受信のために特にタイミングに注意を払う必要はありません。なお、P/ECEではバッファが空の状態で while ループなどによる受信待ちはしないでください。
void COMPutch(unsigned char ch) データを一文字送信します。関数は送信完了を待たずに戻ってきます。
void COMPutStr(unsigned char *str) 文字列を送信します。文字列 strは '\0' で終端してある必要があります。関数は送信完了を待たずに戻ってきます。
void COMClose(void) シリアルポートの使用を終了するときに呼んで下さい。節電のためにクロック供給をやめるようにしています。

使用例

#include <stdio.h>
#include <stdlib.h>
#include <piece.h>

#include "serial.h"

unsigned char VBuff[SCREEN_W*SCREEN_H];

void pceAppInit(void)
{
	pceLCDDispStop();
	pceLCDSetBuffer(VBuff);
	memset(VBuff,0,sizeof(VBuff));
	pceAppSetProcPeriod(80);
	pceLCDDispStart();
	
	pceFontSetPos(0,0);
	pceFontPutStr("COM TEST\n");
	
	COMOpen(COM_8BIT|COM_STOP1|COM_PNONE,COM_BPS4800);
}

void pceAppProc(int cnt)
{
	int ch;
	unsigned long pad;
	char str[16];
	
	// 送信
	pad=pcePadGet();
	if(pad & TRG_A)
	{
		sprintf(str,"%d ",cnt);
		COMPutStr(str);
	}
	
	// 受信
	while(1)
	{
		ch=COMGetch(); // 受信データがなくても戻ってきます
		if(ch == COM_EMPTY) break;
		pceFontPrintf("%c",ch);
	}
	pceLCDTrans();
}

void pceAppExit(void)
{
	COMClose();
}

Acknowledge

以下の方にドライバのテストと評価をしていただきました。

ささおさん

ありがとうございました。