続いてUSARTをWCA-009とつなげて動かします。
USART機能は、これまでのSAM7/SAM3と似ているのですが、LIN機能まで統合されているようです。SAM4LにはPicopower UARTという受信検知を省電力でおこなう機能も備わっており、これも試してみたいところなのですが、残念ながら通信速度が9600bpsで固定されているという制限があります。WCA-009はいつも115,200bpsでつないでおり、9600だと操作や表示速度にも影響が出そうなので、今回はPicopower UARTは使いません。
SAMシリーズのUSARTは伝統的(?)にFIFOを持っていません。一文字ずつ送受信していたのでは、割り込みのオーバヘッドが大きすぎます。そこでDMAを使うことになります。SAM7/SAM3では各ペリフェラルにPDCというDMAチャネルが付いているという構成になっていました。これが、SAM4Lでは少し変わっています。従来のPDCと同等のPDCAという機能が用意されていますが、PDCAはペリフェラルからは独立したDMAチャネルという構成になっています。従ってDMAを使う場合には、ペリフェラルとPDCAとを結び付けるという設定処理が必要となっています。またひとつのPDCAチャネルは受信か送信かの1方向しか処理できないので、例えばUSARTの送受ともDMA処理をおこないたければ、2チャンネルのPDCAの割り当てが必要となります。SAM4Lでは16チャネルのPDCAが備わっています。
このように構成は変わったものの機能的には大きな変化はないので、理解は難しくないのですが、実際にドライバを作ると割り込みハンドラーが3つも必要になります。SAM7/SAM3ではPDCがUSARTに付属していましたので、DMAの終了割り込みもUSARTの割り込みハンドラ内で処理することができました。SAM4Lではこれが分離されており、しかもPDCAは送受信で別チャネルであるために、割り込みのベクタも別に用意されています。そのため、合計で3つの割り込みハンドラーが必要になってしまうのです。
3つも割り込み使うこともあり、ついついPDCAの割り込み許可するのを忘れてしまったりしましたが、送受信とも動き始めました。
USART機能は、これまでのSAM7/SAM3と似ているのですが、LIN機能まで統合されているようです。SAM4LにはPicopower UARTという受信検知を省電力でおこなう機能も備わっており、これも試してみたいところなのですが、残念ながら通信速度が9600bpsで固定されているという制限があります。WCA-009はいつも115,200bpsでつないでおり、9600だと操作や表示速度にも影響が出そうなので、今回はPicopower UARTは使いません。
SAMシリーズのUSARTは伝統的(?)にFIFOを持っていません。一文字ずつ送受信していたのでは、割り込みのオーバヘッドが大きすぎます。そこでDMAを使うことになります。SAM7/SAM3では各ペリフェラルにPDCというDMAチャネルが付いているという構成になっていました。これが、SAM4Lでは少し変わっています。従来のPDCと同等のPDCAという機能が用意されていますが、PDCAはペリフェラルからは独立したDMAチャネルという構成になっています。従ってDMAを使う場合には、ペリフェラルとPDCAとを結び付けるという設定処理が必要となっています。またひとつのPDCAチャネルは受信か送信かの1方向しか処理できないので、例えばUSARTの送受ともDMA処理をおこないたければ、2チャンネルのPDCAの割り当てが必要となります。SAM4Lでは16チャネルのPDCAが備わっています。
このように構成は変わったものの機能的には大きな変化はないので、理解は難しくないのですが、実際にドライバを作ると割り込みハンドラーが3つも必要になります。SAM7/SAM3ではPDCがUSARTに付属していましたので、DMAの終了割り込みもUSARTの割り込みハンドラ内で処理することができました。SAM4Lではこれが分離されており、しかもPDCAは送受信で別チャネルであるために、割り込みのベクタも別に用意されています。そのため、合計で3つの割り込みハンドラーが必要になってしまうのです。
3つも割り込み使うこともあり、ついついPDCAの割り込み許可するのを忘れてしまったりしましたが、送受信とも動き始めました。