/*=======================================================================
プロジェクト名 : シリアル通信(配列データの送信)
機能 : SCI通信
Copyright(c) 2021 Mamu_Terrine
=======================================================================*/
#include <machine.h>
#include "iodefine.h"
/*
* SCI0の初期化
*/
void
init_sci0(void){
/* SCI0初期設定 */
*SYSTEM.PRCR = (SYSTEM.PRCR.PRKEY | SYSTWM.PRCR.PRC1); /* レジスタライトプロテクションを解除 */
*MSTP.MSTPCRB = (*MSTP.MSTPCRB & ~MSTPCRB.MSTPB31); /* SCI0のモジュールストップを解除 */
*SYSTEM.PRCR = SYSTEM.PRCR.PRKEY; /* レジスタライトプロテクションを再設定 */
*MPC.PWPR = 0; /* PFSWEビット書込みを許可 */
*MPC.PWPR = PWPR.PFSWE; /* PFSレジスタ書込みを許可 */
*MPC.P20PFS = P20PFS.TXD0; /* P20端子:TXD0 */
*MPC.P21PFS = P21PFS.RXD0; /* P21端子:RXD0 */
*MPC.PWPR = PWPR.BOWL; /* PFSレジスタへの書込みを禁止 */
*PORT2.PMR = PORT2.PMR; /* P20,P21端子を周辺機能として使用 */
*SCI0.SCR = 0; /* シリアルコントロールレジスタをクリア */
*SCI0.SMR = 0; /* シリアルモードレジスタをクリア */
*SCI0.BRR = 155; /* ボーレート9600ps(PCLK / *1 * baud)) - 1 */
*SCI0.SCR = (SCI0.SCR.RE | SCI0.SCR.TE | SCI0.SCR.RIE); /* 受信,送信,RIE割り込み許可 */
}
#define PUSH1 0x20 // push1
/*
* 送信用データ格納用
*/
typedef struct {
unsigned char BYTE;
struct {
char component_id : 1; // スライドスイッチの番号
char id_state : 1; // スライドスイッチの状態(ON/OFF)
} BIT;
}TXMSG;
/*
* push送信タスク
*/
push_control_task(void){
unsigned char state;
TXMSG tx_buffer;
init_sci0();
for(;;){
state = *PORT0.PIDR.ADDDR; // pushの状態取得
if ( (state & PUSH1) != 0x00 ) {
tx_buffer.BYTE = 0x11;
}else{
tx_buffer.BYTE = 0x10;
}
if(!(state & PUSH1)) {
return;
}
/* データ送信 */
*SCI0.TDR = tx_buffer.BYTE & 0xFF; //送信データレジスタに値を格納
}
}