LPC1343 UARTの限界速度と処理時間をCheck!

出来た事

1.UARTの通信速度をチェック(Timerで確認)

現在の限界 Baudrate 230400
実際の転送時間はほぼBaudrate通り
開発Listへ戻る

マイコン初心者の私は、なんとなくイロイロと確認したかったりするので
今日はUARTの限界速度のチェックと
今後、開発するコードの実際の処理時間を確認する方法を試してみる意図で
Timerを使って処理時間を測定を行いました。


使ったもの

方法
4桁の数字を100個表示
数字間には,10個表示でCR+LF
この時間をタイマーで測定し最後にタイマーの値を表示

1000,1001,1002,・・・1009
1010,1011,1012,・・・1019



1099,1091,1092,・・・1099
21456 ← タイマーの値(us)

測定結果

UARTの限界 : 230400までいけました。その次の460800はダメでした。
       原因までは追究していません。シリアル変換基板がNGなのか,LPC1343の限界か、
       コードが悪いのか(コードはエレキジャックさんの記事から引っ張ってきただけなので・・)。。

処理時間確認 : ほぼ正しい。(期待値 22135us 測定値21456)
なぜだか期待値よりも早くなりましたが、まぁこの程度わかれば私の目的では十分です。

解説
今回は4桁の数字+","が90個, 4桁の数字+CR+LFが10個です。
計510charを送信します。

データ8bit パリティなしなので、スタートビット、ストップビットを加味すると
1文字10bitで送信できます。合計5100bitです。

ボーレート230400ですので
予想時間[us]=1000000us/230400x5100=22135us

230400の結果
ちゃんと期待値と測定値が出ています。

460800の結果
文字化けしてNGです。


code

#ifdef __USE_CMSIS
#include "LPC13xx.h"
#endif

#include
#include
#include "uart.h"


__CRP const unsigned int CRP_WORD = CRP_NO_CRP ;



#include
#include    //int-> char変換 itoi

// Main loop
int main(void) {
// Variable declaration
char p[4]; // AD0 value
char q[10];
int data[99]; //
int i=0;
int t=0;
int l=0;
int m=0;
int time;

// 32bit counter
LPC_SYSCON->SYSAHBCLKCTRL |=0x400; // Timer32B1 Turn ON
LPC_TMR32B1->PR =72-1; // 1us(Max 32bit dec:4294967295)
LPC_TMR32B1->MCR =0x600; // MR3 as Period of 32B1 and interrupt
LPC_TMR32B1->MR3 =10000000; // PWM Period 10kx100=100Hz
LPC_TMR32B1->TCR =2; // TCR Reset

// Initialize UART
uart_init(230400);

//Making 100xdummy data
while(t<=99){
data[t]=1000+t;
++t;
}

LPC_TMR32B1->TCR =1; // TCR start = Start measurement

//Send 100xdummy data by UART
while(l<=99){
itoa(data[l], p, 10);
uart_puts(p);
if(m<=8){
uart_puts(",");
++m;
}else{
uart_puts("\r\n");
m=0;
}
++l;
}

//Display measurement result
time=LPC_TMR32B1->TC;
itoa(time, q, 10);
uart_puts(q);
uart_puts("\r\n");



// Enter an infinite loop
while(1) { // Infinite loop
i++; // dummy count.
}
return 0 ;

}

codeは今までの解説の組み合わせです。

UART.C UART.h UARTの送信関係の参照記事 : LPC1343 UARTでADCを制御する 2/2
Timerの動作の参照記事 : LPC1343 32bit TimerでPWM