3: 2011-01-25 (火) 17:02:46 takaboo | 現: 2011-04-07 (木) 20:16:48 takaboo | ||
---|---|---|---|
Line 1: | Line 1: | ||
+ | TITLE:AT91SAM7 Sample Code | ||
*適用 [#cdc4e51a] | *適用 [#cdc4e51a] | ||
-ハードウェア~ | -ハードウェア~ | ||
Line 11: | Line 12: | ||
サンプルプログラムは以下のURLにZIP形式の圧縮ファイルで設置。適宜アーカイバにて解凍して使用の事。 | サンプルプログラムは以下のURLにZIP形式の圧縮ファイルで設置。適宜アーカイバにて解凍して使用の事。 | ||
- | -''2011/01/25 Ver1.6''~ | + | -''2011/04/07 Ver1.7''~ |
+ | microSDカードへのアクセスサンプル追加~ | ||
+ | us0_dxサンプルにおけるDynamixelプロトコルサポート関数を強化~ | ||
+ | #ref(http://www.besttechnology.co.jp/download/AT91SAM7_SMPL1.7.ZIP) | ||
+ | |||
+ | -2011/01/25 Ver1.6~ | ||
ata6831に与えるPWM信号の端子設定が間違っていたのを修正~ | ata6831に与えるPWM信号の端子設定が間違っていたのを修正~ | ||
#ref(http://www.besttechnology.co.jp/download/AT91SAM7_SMPL1.6.ZIP) | #ref(http://www.besttechnology.co.jp/download/AT91SAM7_SMPL1.6.ZIP) | ||
Line 34: | Line 40: | ||
{ uint32_t(0 << 1), &PIOA, PIOA_PID, PIO_OUTPUT_1, PIO_DEFAULT}, | { uint32_t(0 << 1), &PIOA, PIOA_PID, PIO_OUTPUT_1, PIO_DEFAULT}, | ||
}; | }; | ||
+ | |||
// PIO初期化 | // PIO初期化 | ||
PIO_Configure (pins, PIO_LISTSIZE (pins)); | PIO_Configure (pins, PIO_LISTSIZE (pins)); | ||
Line 128: | Line 134: | ||
Dynamixelは通信速度の範囲が広く1Mbpsまで対応させる必要があるので、PDCを使用してデータの取りこぼしが極力無いようにしている。またus0_pdc_initでUS0を初期化した後、RS485モードを追加指定している。 | Dynamixelは通信速度の範囲が広く1Mbpsまで対応させる必要があるので、PDCを使用してデータの取りこぼしが極力無いようにしている。またus0_pdc_initでUS0を初期化した後、RS485モードを追加指定している。 | ||
us0_pdc_init (baud, us0tbuf, sizeof(us0tbuf), us0rbuf, sizeof(us0rbuf)); | us0_pdc_init (baud, us0tbuf, sizeof(us0tbuf), us0rbuf, sizeof(us0rbuf)); | ||
- | USART0.MR |= _US_USMODE_RS485; | + | USART0.MR = (_US_CLKS_CLOCK | _US_CHRL_8_BITS | _US_PAR_NONE | _US_NBSTOP_1_BIT | _US_USMODE_RS485 | _US_OVER); |
Dynamixelのパケット処理に関しては、GCC Developer Liteに収録されたDynamixelライブラリからの移植。 | Dynamixelのパケット処理に関しては、GCC Developer Liteに収録されたDynamixelライブラリからの移植。 | ||
Line 186: | Line 191: | ||
ATA6831のCSはNPCS2に接続されていることを想定。それ以外はほぼsmpl9と同等。 | ATA6831のCSはNPCS2に接続されていることを想定。それ以外はほぼsmpl9と同等。 | ||
- | **smpl11(tc_intervaltimer).c [#fea55660] | + | **smpl11(spi_sdcard).c [#eceba68d] |
+ | SPI接続されたSDカードI/Fを介してFATファイルシステムで初期化されたSDカードへのアクセスを行う。 | ||
+ | |||
+ | SDカード用のライブラリとして[[ChaN氏>http://elm-chan.org/]]の[[fatfs>http://elm-chan.org/fsw/ff/00index_j.html]]を使用させていただいた。~ | ||
+ | fatfsフォルダに一連のライブラリに関するファイルを同梱しているので、このサンプルプログラムに限り手動でコンパイルオプションにfatfsライブラリを追記する等の操作が必要である。 | ||
+ | |||
+ | **smpl12(tc_intervaltimer).c [#fea55660] | ||
タイマカウンタ0/1のRCのコンペアマッチを使用して一定間隔で割り込みを励起する。 | タイマカウンタ0/1のRCのコンペアマッチを使用して一定間隔で割り込みを励起する。 | ||
Line 197: | Line 208: | ||
このような感じで両タイマの設定を行った後、TC0の割り込みルーチンでLEDの点滅を、TC1の割り込みルーチンでカウント変数のインクリメントを行わせている。 | このような感じで両タイマの設定を行った後、TC0の割り込みルーチンでLEDの点滅を、TC1の割り込みルーチンでカウント変数のインクリメントを行わせている。 | ||
- | **smpl12(tc_toggle).c [#aa7e92e0] | + | **smpl13(tc_toggle).c [#aa7e92e0] |
TC2を波形出力モードにし、RCのコンペアマッチでTIOA2の出力をトグル動作させる。そのポートにはブザーが接続されているので、トグル動作させる周波数を変化させて音階を奏でる。 | TC2を波形出力モードにし、RCのコンペアマッチでTIOA2の出力をトグル動作させる。そのポートにはブザーが接続されているので、トグル動作させる周波数を変化させて音階を奏でる。 | ||
Line 207: | Line 218: | ||
TC.CHANNEL[2].CCR = _TC_SWTRG; // これをやらないと即時反映されない | TC.CHANNEL[2].CCR = _TC_SWTRG; // これをやらないと即時反映されない | ||
- | **smpl13(tc_cap).c [#p18b7d69] | + | **smpl14(tc_cap).c [#p18b7d69] |
TC0~2の3つのタイマカウンタをキャプチャモードにし、TIOA0~2に入力された信号のパルス幅を自動計測する。 | TC0~2の3つのタイマカウンタをキャプチャモードにし、TIOA0~2に入力された信号のパルス幅を自動計測する。 | ||
Line 218: | Line 229: | ||
| _TC_ABETRG; // TIOBを外部トリガに | | _TC_ABETRG; // TIOBを外部トリガに | ||
- | **smpl14(tc_pwm).c [#if2af324] | + | **smpl15(tc_pwm).c [#if2af324] |
TC0を波形出力モードにし、TIOA0からPWMを出力する。デューティー比を変更してその結果を確認するためにTIOA0に接続したLEDの輝度を見る。 | TC0を波形出力モードにし、TIOA0からPWMを出力する。デューティー比を変更してその結果を確認するためにTIOA0に接続したLEDの輝度を見る。 | ||
Line 224: | Line 235: | ||
TC.CHANNEL[0].CMR |= _TC_WAVE | _TC_WAVESEL_UP_AUTO | _TC_ACPC_SET | _TC_ACPA_CLEAR; | TC.CHANNEL[0].CMR |= _TC_WAVE | _TC_WAVESEL_UP_AUTO | _TC_ACPC_SET | _TC_ACPA_CLEAR; | ||
- | **smpl15(pit).c [#b93d36a4] | + | **smpl16(pit).c [#b93d36a4] |
PITによるインターバルタイマで割り込みを励起し、LEDを点滅させる。 | PITによるインターバルタイマで割り込みを励起し、LEDを点滅させる。 | ||
Line 235: | Line 246: | ||
単一のペリフェラルであれば通常通りAICに直接設定すればよい。 | 単一のペリフェラルであれば通常通りAICに直接設定すればよい。 | ||
- | **smpl16(pwm).c [#fdef1aa2] | + | **smpl17(pwm).c [#fdef1aa2] |
PWMにてPWM波形を3ch出力し、各々の周期割り込みでデューティー比をスイープさせる。PWM0~2の各端子にはLEDを接続し、輝度と周期の違いを見る。 | PWMにてPWM波形を3ch出力し、各々の周期割り込みでデューティー比をスイープさせる。PWM0~2の各端子にはLEDを接続し、輝度と周期の違いを見る。 | ||
PWMの初期化痔と初期化後において扱うレジスタが異なる部分があるので、詳細はソースを参照の事。また、0ないし1をデューティーとして与えると出力がおかしくなるので注意。 | PWMの初期化痔と初期化後において扱うレジスタが異なる部分があるので、詳細はソースを参照の事。また、0ないし1をデューティーとして与えると出力がおかしくなるので注意。 | ||
- | **smpl17(udp_cdcemu).c [#e9902f4b] | + | **smpl18(udp_cdcemu).c [#e9902f4b] |
既にuartのサンプルで使用しているが、CDCのエミュレーションをベタに書いたもの。自前でこねくり回したい場合用。 | 既にuartのサンプルで使用しているが、CDCのエミュレーションをベタに書いたもの。自前でこねくり回したい場合用。 | ||
なおCDCエミュレーション関連のライブラリは全てATMELのサンプルそのもの。 | なおCDCエミュレーション関連のライブラリは全てATMELのサンプルそのもの。 | ||
- | **smpl18(udp_mouse).c [#w763e395] | + | **smpl19(udp_mouse).c [#w763e395] |
UDP上でHIDエミュレーションを行いUSBマウス化する。 | UDP上でHIDエミュレーションを行いUSBマウス化する。 | ||
古いATMELのサンプルそのもの。ポーリングベースなので過度な期待をしない事。 | 古いATMELのサンプルそのもの。ポーリングベースなので過度な期待をしない事。 |