2014年6月1日日曜日

ATxmega32D4 タイマメモ

秋月電子で販売されてるATxmega32D4のタイマーの使い方メモ

xmega32D4には4つの16bitタイマーが搭載されている。
うち3つは4つの比較チャネルを持っていて、残りの1つは2つの比較チャネルを持っている。
TCxx.CCA, TCxx.CCB, TCxx.CCC, TCxx.CCDで比較対象となる値を設定する。
これらを使って4通りの周波数で14本のPWMを出力できる。
xmegaは入出力ポートがとても高機能になっていて、ピン再割当機能を使ってPWM出力をOR変調できたり、ピンn形態設定レジスタ(PORTx.PINnCTRL)を使ってIOピンの出力形態をデフォルトのコンプリメンタリからワイヤードOR、ANDに切り替えれたりもする。これは2和音矩形波出力を行う時に便利に使えそう(๑╹ڡ╹๑)

以下ソースコード
/*
 * ATxmega32D4_test.c
 *
 * Created: 2013/10/13 14:06:52
 *  Author: kingyo
 *
 * ライタの接続
 * Vcc:   Vcc
 * GND:   GND
 * MISO:  PDI_DATA(34pin)
 * RESET: PDI_CLK(35pin)
 *
 */ 

#include <avr/io.h>
#define F_CPU 32000000UL // 32 MHz
#include <util/delay.h>

int main(void)
{
 /* IOポート設定 */
 PORTC.DIR = 0xff;       // ポートCを出力に
 PORTD.DIR = 0xff;       // ポートDを出力に
 PORTE.DIR = 0x0f;       // ポートEを出力に


 /* クロック設定 内蔵CR32MHz */
 OSC.CTRL |= OSC_RC32MEN_bm;        // 32MHz内部発振を許可
 while(!(OSC.STATUS & 0b00000010)); // 安定化待ち
 CPU_CCP = CCP_IOREG_gc;            // 設定変更許可
 CLK.CTRL = CLK_SCLKSEL_RC32M_gc;   // 32MHzに設定
 //DFLLRC32M.CALA = 0xff;           // DFLL校正レジスタ弄り
 //DFLLRC32M.CALB = 0xff;
 
 
 /* 16bitタイマC0 (CCA, CCB, CCC, CCDの4本) */
 TCC0.PER = 10000;                  // カウンタ上限値
 TCC0.CCA = 5000;                   // (出力はPORTC.0)
 TCC0.CTRLB = 0b00010011;           // CCAEN, 単一傾斜PWM
 TCC0.CTRLA = 0b00000001;           // 前置分周器: clkPER
 
 /* 16bitタイマC1 (CCA, CCBの2本) */
 TCC1.PER = 500;                    // カウンタ上限値
 TCC1.CCA = 200;                    // (出力はPORTC.4)
 TCC1.CTRLB = 0b00010011;           // CCAEN, 単一傾斜PWM  
 TCC1.CTRLA = 0b00000001;           // 前置分周器: clkPER
 
 /* 16bitタイマD0 (CCA, CCB, CCC, CCDの4本) */
 TCD0.PER = 500;                    // カウンタ上限値
 TCD0.CCA = 200;                    // (出力はPORTD.0)
 TCD0.CTRLB = 0b00010011;           // CCAEN, 単一傾斜PWM  
 TCD0.CTRLA = 0b00000001;           // 前置分周器: clkPER
 
 /* 16bitタイマE0 (CCA, CCB, CCC, CCDの4本) */
 TCE0.PER = 10001;                  // カウンタ上限値
 TCE0.CCA = 5000;                   // (出力はPORTE.0)
 TCE0.CTRLB = 0b00010011;           // CCAEN, 単一傾斜PWM  
 TCE0.CTRLA = 0b00000001;           // 前置分周器: clkPER

}
今回はじめてソースコードをハイライト表示するSyntaxHighlighterってのを使ってみた。
割と良さげ。
~ おわり ~

0 件のコメント:

コメントを投稿