PSoCでバイナリ送受信 その2

どうも、Ramencozoです。

前回PSoCでバイナリな送受信のテストしてみてたのですが、アレののち、.asmいじっただけではなんかうまくいかなかったのですよ。
でもって今日(2011/05/29)いろいろガチャガチャやってたらうまくいきました(゚∀゚)

うまくいったポイントとして下記。

・UARTモジュールの設定
->「RxCmdBuffer」を「Disable」に → 高レベルAPIを使用しない
->「IgnoreCharsBelow」を「0」に → ASCII制御文字含めすべて処理対象に
・UART_1INT.asmは別段変更なくいけた件
・データの受信自体は割込みっぽい。拾いに行くのがポーリングな感じっぽい。

設定画面な画像も。

でもってmain.cの中こんな感じにしたらイケました(゚∀゚)たぶんいらん関数にしちゃってるところあるかと(´ω`)


main.c

#include // part specific constants and macros
#include "PSoCAPI.h" // PSoC API definitions for all User Modules

BYTE bRxData = 0;

BOOL WaitReceiveData(void);
void ClearReceiveData(void);

void main(void)
{
LED_1_Start();
LED_1_Off();

UART_1_IntCntl(UART_1_ENABLE_RX_INT);
UART_1_Start(UART_1_PARITY_NONE);

M8C_EnableGInt ; // Uncomment this line to enable Global Interrupts

UART_1_CPutString("Started...");
UART_1_PutCRLF();

while(1){
//LF(='\r')だったらデータ終端と判断
while(bRxData != '\r'){
LED_1_On();
if(WaitReceiveData()){
LED_1_Off(); //LEDはただの動作表示用
UART_1_SendData(bRxData);
while(!(UART_1_bReadTxStatus() & UART_1_TX_BUFFER_EMPTY));
//echoなSendしてし終わるまでwhileで待ち
}
}
ClearReceiveData();
}
}

BOOL WaitReceiveData(void){
BYTE bRxStatus;

while(!(bRxStatus = UART_1_bReadRxStatus() & UART_1_RX_COMPLETE));

if((bRxStatus & UART_1_RX_NO_ERROR) == 0){
bRxData = UART_1_bReadRxData();
return(TRUE);
}else{
bRxData = 0;
return(FALSE);
}
}
void ClearReceiveData(void){
bRxData = 0;
}

これでひとまず0x00〜0xFFまでのhexなバイナリデータを拾うことができました(゚∀゚)
なんかデータの取りこぼしとか起きそうですが、今のところ問題ないっぽいです。これよりさらに重い処理とか加えていったら考慮しなければならないところかと思いますが。。。
とりあえずソレにてバイナリな送受信イケましたということで。