[PR]
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
dsPIC33CHシリーズはこれまでのdsPIC33E系とは異なり純粋なタイマーは1系統となり、タイマー・インプットキャプチャ・アウトプットコンペア機能が統合されたSCCPモジュールに変わりました。このSCCPモジュールはマスターコアに8ch、スレーブコアに4ch搭載されています。
今回はTimer1モジュール使用し1msec間隔で割り込みを発生させLEDを反転出力させます。
FP = 90MHz ,プリスケーラ = 1/8 , 周期 = 1kHz なのでPR1 の設定値は
PR1 = FP * Prescaler / Period = 90000000/(8 * 1000) = 112500 |
/*----------------------------------------------------------------------------------*/
/*【INC】インクルードファイル*/
/*----------------------------------------------------------------------------------*/
#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <libpic30.h>
#include "config.h"
/*----------------------------------------------------------------------------------*/
/*【CONST】定数定義*/
/*----------------------------------------------------------------------------------*/
#define TIMER1_USER_INTERVAL 1000 /* 1kHz */
#define TIMER1_USER_PR1 (_u2)( FP / (8 * TIMER1_USER_INTERVAL))
/*----------------------------------------------------------------------------------*/
/* Main関数 */
/*----------------------------------------------------------------------------------*/
int main(int argc, char** argv)
{
/*----------------------------------------------------------------------------------*/
/* クロック初期化*/
/*----------------------------------------------------------------------------------*/
vds_Main_Init_Clock_Register(); /* クロック初期化 */
/*----------------------------------------------------------------------------------*/
/* GPIO初期化*/
/*----------------------------------------------------------------------------------*/
TRISEbits.TRISE0 = 0u; /* LED1ピンはデジタル出力ピン */
/*----------------------------------------------------------------------------------*/
/* Timer1初期化*/
/*----------------------------------------------------------------------------------*/
PR1 = TIMER1_USER_PR1; /* 周期設定 */
T1CON = 0x0000u;
T1CONbits.TCKPS = 1u; /* クロックプリスケーラ選択(1 = 1:8) */
T1CONbits.TCS = 0u; /* クロック源選択(0 = FP) */
T1CONbits.TON = 1u; /* 起動 */
/*----------------------------------------------------------------------------------*/
/* Timer1割り込み開始*/
/*----------------------------------------------------------------------------------*/
IPC0bits.T1IP = 4u; /* 割り込みレベル */
IFS0bits.T1IF = 0u; /* 割り込みフラグクリア */
IEC0bits.T1IE = 1u; /* 割り込み有効化 */
/*----------------------------------------------------------------------------------*/
/* メインルーチン*/
/*----------------------------------------------------------------------------------*/
while(1)
{
;
}
}
/*----------------------------------------------------------------------------------*/
/* <funcname> _T1Interrupt(void) */
/* <function> T1割り込み */
/* <input gt; 無し*/
/* <return> 無し*/
/* <side effects> 無し*/
/* <precondition> 無し */
/* <note> 無し */
/*----------------------------------------------------------------------------------*/
void __attribute__((interrupt, no_auto_psv)) _T1Interrupt(void)
{
__builtin_btg(&LATE,0u);
/*----------------------------------------------------------------------------------*/
/* 割り込みフラグクリア*/
/*----------------------------------------------------------------------------------*/
IFS0bits.T1IF = 0u;
}