メニュー
▼ アクセス(地図)
▼ Windowsアプリ開発 ▼ マイコン開発 ▼ CGI・PHP制作 |
▼ サイトマップ(全投稿記事)
▼ タイトル(画像一覧) ▼ 事業内容 |

お問い合わせメールフォームが開きます。
2015年07月27日
RX630 TPUでPWM
ルネサスのRX630マイコンを使用してPWMの確認を行いました。
メーカから提供されているPWMのサンプルはMTU(マルチファンクションタイマパルスユニット)を使用したものですが、今回はTPUa(16ビットタイマパルスユニット)を使用しての確認です。
・PWMモードは1です。
・TIOCA0 と TIOCC0 を使用。
基本的には「ユーザーズマニュアル」のPWMの項目の説明に沿っていますが
赤字の「端子機能制御レジスタ(PxnPFS)」については忘れがちです。
TIOCC0端子(PWM設定周期1kHz・20%)の波形は↓

ソースコードは下記のような感じになります。
/************************************************
* RX630 16ビットタイマパルスユニット(TPUa)
* PWM(Mode:1) TIOCA0/TIOCC0 設定
************************************************/
void Init_16bitTimer_PWM(void)
{
/* Configure pin as an output */
PORT3.PDR.BIT.B2 = 1; // (TIOCC0)
PORTA.PDR.BIT.B0 = 1; // (TIOCA0)
/* Configure pin for peripheral function */
PORT3.PMR.BIT.B2 = 1;
PORTA.PMR.BIT.B0 = 1;
/* Enable write to PFSWE bit */
MPC.PWPR.BYTE = 0x00;
/* Disable write protection to PFS registers */
MPC.PWPR.BYTE = 0x40;
/* Configure pin for TIOCxx outputs */
MPC.P32PFS.BYTE = 0x03;
MPC.PA0PFS.BYTE = 0x03;
/* Enable write protection to PFS registers */
MPC.PWPR.BYTE = 0x80;
/* Protection off */
SYSTEM.PRCR.WORD = 0xA503;
/* Cancel the TPU0 module clock stop mode */
MSTP_TPU0 = 0;
/* Protection on */
SYSTEM.PRCR.WORD = 0xA500;
/* Select PCLK(48Mz)/16, clock counted at
falling edge, no clearing of TCNT counter. */
TPU0.TCR.BYTE = 0x22;
/* Initial TICCxx output is 1 and toggled at
TGRA compare match. toggled by TRGB. */
TPU0.TIORH.BYTE = 0x37;
TPU0.TIORL.BYTE = 0x37;
/* Operate timers in pwm mode-1 */
TPU0.TMDR.BYTE = 0x02;
/* Use TGRA/TGRC to set the pwm cycle to
PCLK(48Mz)/16/3000 = 1kHz */
TPU0.TGRA = 3000;
TPU0.TGRC = 3000;
/* TGRB/TGRD used to set the pwm duty cycle to xx% */
TPU0.TGRB = 300; // 10% (3000*0.1=300)
TPU0.TGRD = 600; // 20%
/* Start the TSTR counter */
TPUA.TSTR.BIT.CST0 = 0x1;
}
上の画像に書かれている文字を入力して下さい
|
|
書き込まれた内容は公開され、ブログの持ち主だけが削除できます。