忍者ブログ

[PR]

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

2025/05/23

dsPIC33CH Curiosity Development Board(Timer1にて1msec周期で割り込みしLED1点滅)

dsPIC33CHシリーズはこれまでのdsPIC33E系とは異なり純粋なタイマーは1系統となり、タイマー・インプットキャプチャ・アウトプットコンペア機能が統合されたSCCPモジュールに変わりました。このSCCPモジュールはマスターコアに8ch、スレーブコアに4ch搭載されています。

今回はTimer1モジュール使用し1msec間隔で割り込みを発生させLEDを反転出力させます。
FP = 90MHz ,プリスケーラ = 1/8 , 周期 = 1kHz なのでPR1 の設定値は

PR1 = FP * Prescaler / Period = 90000000/(8 * 1000) = 112500

となります。

ハードウェア構成

Timer1割り込みでRE0を反転させます。
ソースコード
コンフィグレーション設定やクロック設定の関数に関して記述を省略していますが「dsPIC33CH Curiosity Development Board(準備編)」と同じです。

/*----------------------------------------------------------------------------------*/
/*【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;
}



これでメイン側のLED0が1kHz間隔で点滅できていると思います。
PR

2020/01/12 dsPIC33C Comment(0)

プロフィール
 
HN:
ぴくお
性別:
非公開
 
 
カテゴリー
 
 
 
最新記事
 
(10/03)
(09/05)
(08/23)
(08/17)
(08/16)
 
 
RSS
 
 
 
リンク
 
 
 
免責事項
当サイトに掲載の回路図やプログラム等は動作する事を期待して掲載しておりますが、その動作の保証、性能の保証は致しません。 また掲載されているソフトウェアの使用により生じたいかなる損害に関しまして作者は一切責任を負いません。