PSoC のシリアル通信は双方向のUARTモジュールと受信のRX8と送信のTX8がある、どちらを使ったらいいんだろー、とりあえず送信受信ができればよいのでUARTを使うかな
受信は取りこぼしがないように割り込み受信ができるようにUART setupと最後に全体の割り込み許可をする
//UART setup
UART_1_CmdReset(); //Initialize receiver/cmd buf. UART_1_IntCntl(UART_1_ENABLE_RX_INT); //Enable RX interrupts
UART_1_Start(UART_1_PARITY_NONE); //Enable UART
//CPU ALL Interrupt Enable M8C_EnableGInt; //CPU ALL Interrupt Enable
ハイパーターミナルで実験をする。
受信した内容をUART_1_bReadRxDataで読んだ、オッ読めたと思ったら受信完了のビットが1のままだから永久に読んでしまう UART_1_bReadRxDataは使えないと思った。そのほかの読み込み関数 UART_1_cGetChar を使うと時々受信ができていない、関数UART_1_cReadChar は受信していないかのように受信した内容を表示しない、UART_1_iReadChar はUART_1_bReadRxDataと症状が同じだ、受信関数は全部使えない?、受信割り込みを許可しないで使うとどうなるのかな?、 //UART_1_IntCntl(UART_1_ENABLE_RX_INT); //Enable RX interrupts にした。UART_1_bReadRxDataで読んでみたら受信完了のビットもゼロとなって正常に表示できた。UART_1_cGetCharはどうなんだろう、オッツこれも正常に動作している。UART_1_cReadCharもUART_1_iReadCharも正常に表示できた。なーんだ読み込み関数UART_1_bReadRxData、UART_1_cGetChar、UART_1_cReadChar、UART_1_iReadCharは受信割り込みを許可して使えないのか~
まとめ(1) 以下の関数は受信割り込みの許可をしないで使用することができる
bRxData = UART_1_bReadRxData(); //OK
bRxData = UART_1_cReadChar(); //OK bRxData = UART_1_iReadChar(); //OK
bRxData = UART_1_cGetChar(); //OK
まとめ(2) 以下の3種類は割り込み許可で使用できる
UART_1_bCmdLength 、UART_1_szGetParam 、UART_1_CmdReset
まとめ(3) バイナリー方式のプロトコルで通信する場合は上記の関数は使えないので受信割り込みを自作する必要があるのかな? あ~つかれるな~