Renesas Community
Search Community
User
Join or sign in
Site
Search Community
User
Renesas Engineering Community
FAQ
HELP
More
Cancel
Forums & Groups
English Community
中文社区(Chinese Community)
More
Cancel
かふぇルネ
forums-groups
Microcontrollers and Microprocessors
Other MCU/MPU Products
V850
More
Cancel
V850
V850 Forum
DMAを使用したUART受信について
Home
Forum
Tags
More
Cancel
New
Replies
6 replies
Subscribers
443 subscribers
Views
15912 views
Users
0 members are here
V850ES
UC3RIF
INTUC3R
DMA0
beginner
受信割込み
Options
Share
More
Cancel
Related
DMAを使用したUART受信について
dai_tory
over 11 years ago
毎度お世話になっております。
V850ES/JH3-Eを使用しております。
DMA0の転送起動要因としてUARTC3の受信完了割り込み(INTUC3R)を指定しています。
例えば、DMA0の転送回数を5回、5バイトの受信があった場合、最初の1バイトを受信した時点でDMA0が転送を開始し、その後の4バイトで起こる受信割込みは無視される、という認識で正しいでしょうか。
また、このとき無視される受信割込みの割り込み要求フラグ(UC3RIF)は、DMA転送完了割り込み内でクリアする必要があるのでしょうか。
あと、通信速度が遅い場合、UARTC0の受信レジスタが更新されていないのにDMA0がデータの取得に行ってしまう、ということは起こりうるのでしょうか。
毎度質問ばかりで申し訳ありませんが、
以上、よろしくお願いいたします。
Parents
Kon Nozomu(すと)
over 11 years ago
dai_toryさん
DMA転送の前に…UARTCの受信完了割り込みは1フレーム(スタートビット+データビット{8bit or 7bit}+パリティビット+ストップビット)ごとに発生するので、DMA転送トリガにUARTCを指定する場合は、転送回数は基本的に1回となります。
複数回指定した場合、同じ転送を繰り返し、バス権を占有するため非効率となります。また、転送元、転送先アドレスの設定によっては(データ上書きによる)不具合の原因となります。
この場合の設定は、転送元:ソースアドレスを受信レジスタ(UC3RX、アドレス固定)、転送先:デスティネーションアドレスをRAM(アドレスインクリメント、もしくは固定)にしておき、DMA転送を行います。転送完了後、DMA転送完了割り込みが発生するので、必要に応じて次の転送アドレスをセットします。
一方、UARTC受信割り込みでは割り込みが管理するバッファに蓄積しておき、伝文単位の取得を認識した時(CRやLFを受信したなど)にDMAでアプリケーション領域に転送をしたい場合は、転送元をバッファアドレス(インクリメント)、転送先をアプリ領域アドレス(インクリメント)にして、転送回数を受信したバイト数と、ソフトウェアからDMAを起動すれば一括でRAMに転送できます。
一括転送を行う場合、UARTC受信割り込み内で行うと割り込み処理の時間が長くなってしまう恐れがあるので、伝文単位の受信が完了したかを非割り込み処理中にポーリング確認し、必要に応じてDMA転送したほうがより安全かと思います。
しかしながら、こちらの場合はDMAの恩恵に与っているのかイマイチ疑問ではありますが…
Cancel
Up
0
Down
Reply
Cancel
Reply
Kon Nozomu(すと)
over 11 years ago
dai_toryさん
DMA転送の前に…UARTCの受信完了割り込みは1フレーム(スタートビット+データビット{8bit or 7bit}+パリティビット+ストップビット)ごとに発生するので、DMA転送トリガにUARTCを指定する場合は、転送回数は基本的に1回となります。
複数回指定した場合、同じ転送を繰り返し、バス権を占有するため非効率となります。また、転送元、転送先アドレスの設定によっては(データ上書きによる)不具合の原因となります。
この場合の設定は、転送元:ソースアドレスを受信レジスタ(UC3RX、アドレス固定)、転送先:デスティネーションアドレスをRAM(アドレスインクリメント、もしくは固定)にしておき、DMA転送を行います。転送完了後、DMA転送完了割り込みが発生するので、必要に応じて次の転送アドレスをセットします。
一方、UARTC受信割り込みでは割り込みが管理するバッファに蓄積しておき、伝文単位の取得を認識した時(CRやLFを受信したなど)にDMAでアプリケーション領域に転送をしたい場合は、転送元をバッファアドレス(インクリメント)、転送先をアプリ領域アドレス(インクリメント)にして、転送回数を受信したバイト数と、ソフトウェアからDMAを起動すれば一括でRAMに転送できます。
一括転送を行う場合、UARTC受信割り込み内で行うと割り込み処理の時間が長くなってしまう恐れがあるので、伝文単位の受信が完了したかを非割り込み処理中にポーリング確認し、必要に応じてDMA転送したほうがより安全かと思います。
しかしながら、こちらの場合はDMAの恩恵に与っているのかイマイチ疑問ではありますが…
Cancel
Up
0
Down
Reply
Cancel
Children
No Data