忍者ブログ

[PR]

×

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

2025/05/22

dsPIC33CH Curiosity Development Board(スレーブ Lチカ編)

dsPIC33CHシリーズはデュアルコアになっていますので、これまでの
PIC/dsPIC/PIC32シリーズとは大きく異なる点があります。

まずスレーブ側はFlashメモリではなく、Program RAM Memory(PRAM)という
揮発性のプログラム領域を有しており、このPRAM領域は起動した時には
何もプログラムは書かれておりません。
スレーブ側のプログラムはマスター側のフラッシュ領域に書きこまれ、



マスター側からスレーブ側に転送を指示する事でスレーブ側が動作する
構造になっています



マスターソースコード




#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include <libpic30.h>
#include "config.h"
#include "../../../dsPIC33CH512MP508S1/../dist/default/production/Slave.h"

int main(int argc, char** argv)
{
  /*------------------------------------------------------------------------------------------*/
  /*【****】初期化*/
  /*------------------------------------------------------------------------------------------*/
   vds_Main_Init_Clock_Register(); //Clock設定

   TRISEbits.TRISE0 = 0u;

   _program_slave(1, 0, Slave);  /*スレーブへの書き込み*/
   _start_slave(); /*スレーブ開始*/
 /*------------------------------------------------------------------------------------------*/
 /*【****】メインルーチン*/
 /*------------------------------------------------------------------------------------------*/
 while(1)
 {
  if ( LATEbits.LATE0 == 1)
  {
   LATEbits.LATE0 = 0;
  }
  else
  {
   LATEbits.LATE0 = 1;
  }
 }
}







インクルードファイルの
#include "../../../dsPIC33CH512MP508S1/../dist/default/production/Slave.h"







は以下のスレーブ制御関数のヘッダファイルとなっております。

   _program_slave(1, 0, Slave);  /*スレーブへの書き込み*/
   _start_slave(); /*スレーブ開始*/







この_program_slave()の中の引数の'Slave'はどうするのかというと

(1)まずスレーブプロジェクトを作成します。
(2)マスタープロジェクトの中のSlavesを右クリックし、(1)で作成したプロジェクトを追加します。
(3)マスタープロジェクトの中のSlavesを右クリックし、プロパティを開きます。



(4)すると以下の様な設定画面が表示されますので、ここのImage Nameという行で指定した名前を引数内で指定します。



(5)Buildのチェックボックスはスレーブをビルドするかの指定で、
Debugのチェックボックスはスレーブをデバッグするかの指定です。

Buildはよっぽどチェックしっぱなしで大丈夫ですが、マスターとスレーブで行き来しながらデバッグする場合、このDebugのチェックボックスをON/OFFを頻繁に変更する事になります。

またインクルードファイルの

#include "../../../dsPIC33CH512MP508S1/../dist/default/production/Slave.h"







はスレーブプロジェクト内のproductionフォルダにこのイメージ名のヘッダ
ファイルが生成されますので、それを指定します。

スレーブソースコード


#include <stdio.h>
#include <stdlib.h>
#include <xc.h>
#include "PeripheralDriver/peripheral_init.h"
#include "board.h"

int main(int argc, char** argv)
{
 /*------------------------------------------------------------------------------------------*/
 /*【****】初期化*/
 /*------------------------------------------------------------------------------------------*/
  vdg_Peripheral_Init(); //Clock設定
  TRISEbits.TRISE1 = 0u;
 /*------------------------------------------------------------------------------------------*/
 /*【****】メインルーチン*/
 /*------------------------------------------------------------------------------------------*/
 while(1)
 {
  if ( LATEbits.LATE1 == 1)
  {
   LATEbits.LATE1 = 0;
  }
  else
  {
   LATEbits.LATE1 = 1;
  }
 }
}







これでメイン側がLED0,スレーブ側がLED1を点滅させていると思います。
PR

2019/05/04 dsPIC33C Comment(0)

COMMENT

COMMENT FORM

NAME
MAIL
WEB
TITLE
COMMENT
PASSWORD

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