LPCXpressoBoard OM13053 + MCUXpresso IDE の組み合わせで、MCUXpresso
SDK のサンプルプログラム lpcxpresso812max_usart_transfer_ring_buffer をベースに開発を行っているのだが、オリジナルのボーレート 9600bps を 115200bps に変更すると動かない。具体的には fsl_usart.c の USART_SetBaudRate() 内の
assert((((srcClock_Hz >> 4U) / brgval) - baudrate_Bps) < ((baudrate_Bps / 100) * 3));が例外を吐いてプログラムを止める(JTAG デバッガ万歳!!)
Arduino の Atmega328 でも 115200bps でいけるのに、Cortext-M0 がダメってどういうこと??と色々調べていくと、ボーレートジェネレータへの入力クロックが 12MHz では低いらしい(Arduino Uno の CPU クロックは 16MHz)。
ということで、CPU クロックを変更。
usart_transfer_ring_buffer.c の main() の
BOARD_BootClockIRC12M();を
BOARD_BootClockPll24M();に変更して、clock_config.c の BOARD_BootClockPll24M() の
config.targetFreq = 12000000U; /*!< set pll target freq */
を
config.targetFreq = 24000000U; /*!< set pll target freq */と
CLOCK_SetCoreSysClkDiv(1U);
を
CLOCK_SetCoreSysClkDiv(2U);
にすれば OK 。(ここはサンプルのバグっぽい...)
ただし、他のクロック系にどんな影響が出るかは調べていなので要注意。
0 件のコメント:
コメントを投稿