トランジスタ技術8月号:UARTについて
こんにちは。
トランジスタ技術2007年8月号付録のdsPIC30Fを使って色々といじっているのですが、UARTのところで問題が現れてしまいました。
付録基盤の23・24ピン(dsPIC30F2012の16・17ピン)のURx/UTxを使って、他の組み込みチップと20~30バイトのパケットを通信したいのですが、ボーレートやパリティの設定を正しく行っても送受信ができません。
PCのRS232-Cと組み込みチップを繋げて通信はできているのですが、付録基盤から同じパケットを送信すると不定値が現れてしまいます。
電圧や配線は確かめましたが、特に問題がありそうな場所はありませんでした。
ソースは次のような感じです。助けていただけないでしょうか。
#include <uart.h>
#include <p30f2012.h>
void init() {
unsigned int _U1BRG; // U1BRG register config
unsigned int _U1MODE; // U1MODE register config
unsigned int _U1STA; // U1STA register config
CloseUART1();
ConfigIntUART1( UART_RX_INT_DIS & UART_TX_INT_DIS );
// U1BRG register
_U1BRG= ( (7370000*4/19200)/16); // Fcy / BaudRate / 16
// U1MODE register, I/O (U1TX/U1RX), N81
_U1MODE = UART_EN &
UART_IDLE_CON &
UART_RX_TX &
UART_DIS_WAKE &
UART_DIS_LOOPBACK &
UART_EN_ABAUD &
UART_NO_PAR_8BIT &
UART_1STOPBIT;
// U1STA register
_U1STA = UART_INT_TX_BUF_EMPTY &
UART_TX_PIN_NORMAL &
UART_TX_ENABLE &
UART_INT_RX_CHAR &
UART_ADR_DETECT_DIS &
UART_RX_OVERRUN_CLEAR;
// Open UART1
OpenUART1(_U1MODE, _U1STA, _U1BRG);
} // end of init()
int main(void){
unsigned int packet[] = {パケットデータ}
unsigned int result[30];
unsigned int i;
// write process
for(i=0; i<PACKET_LENGTH; i++) {
while(U1STAbits.UTXBF != 0) { ; }
U1TXREG = packet[i] & 0xFF;
}
while(!U1STAbits.TRMT) {;}
// read process
for(i=0; i<PACKET_LENGTH; i++) {
while(U1STAbits.URXDA != 0) {;}
result[i] = U1RXREG & 0xFF;
} // for(i)
while(1) {;}
} // end of main()
補足
よくわかりません・・・