大和通信の技術力

2018年4月から組込み新人(2017入社)の実習記録です。 これからのIoT/AI開発に向け日々勉強の毎日。 ハード/ソフト開発者をめざす奮闘記です。

2018年04月

4月の成果

プロジェクト名 test

インターバルタイマを使いLEDの点灯を繰り返している。

0のとき点灯、1のとき消灯。

メインプログラム

/***********************************************************************************************************************
Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_cgc.h"
#include "r_cg_port.h"
#include "r_cg_timer.h"
/* Start user code for include. Do not edit comment generated here */
int i = 0;
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"

/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
/* Start user code for pragma. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
void R_MAIN_UserInit(void);

/***********************************************************************************************************************
* Function Name: main
* Description  : This function implements main function.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/

void main(void)
{
    R_MAIN_UserInit();
    /* Start user code. Do not edit comment generated here */
    R_TAU0_Channel0_Start();
    while (1U)
    {
	if(i <= 1){
		i++;
	}else{
		i = 0;
	}
	}
    /* End user code. Do not edit comment generated here */
}

/***********************************************************************************************************************
* Function Name: R_MAIN_UserInit
* Description  : This function adds user code before implementing main function.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
void R_MAIN_UserInit(void)
{
    /* Start user code. Do not edit comment generated here */
   
    EI();
    /* End user code. Do not edit comment generated here */
}

タイマー割り込みプログラム

Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_timer.h"
/* Start user code for include. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"

/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
#pragma interrupt r_tau0_channel0_interrupt(vect=INTTM00)
#pragma interrupt r_tau0_channel2_interrupt(vect=INTTM02)
/* Start user code for pragma. Do not edit comment generated here */
extern int i;
/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
* Function Name: r_tau0_channel0_interrupt
* Description  : This function is INTTM00 interrupt service routine.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
static void __near r_tau0_channel0_interrupt(void)
{
    /* Start user code. Do not edit comment generated here */
    if(i <= 0){
        P6_bit.no2 = 1;
    }else if(i == 2){
	P6_bit.no2 = 0;
    }
    /* End user code. Do not edit comment generated here */
}

プロジェクト名 test_2

1.RL78のPWM出力タイマを使い、パルスを出力する。 2.パルスの出力を7セグメントLEDの表示に合わせて出力周波数を1KHz変えていく。 7セグ '9' 表示時 = 出力周波数 '10' KHz 7セグ '8' 表示時 = 出力周波数 '9' KHz 7セグ '7' 表示時 = 出力周波数 '8' KHz 7セグ '6' 表示時 = 出力周波数 '7' KHz 7セグ '5' 表示時 = 出力周波数 '6' KHz 7セグ '4' 表示時 = 出力周波数 '5' KHz 7セグ '3' 表示時 = 出力周波数 '4' KHz 7セグ '2' 表示時 = 出力周波数 '3' KHz 7セグ '1' 表示時 = 出力周波数 '2' KHz 7セグ '0' 表示時 = 出力周波数 '1' KHz 3.ターゲットに接続したメカニカルスイッチを使い、7セグメントLEDの表示を1づつ上下する。

メインプログラム


Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_cgc.h"
#include "r_cg_port.h"
#include "r_cg_timer.h"
/* Start user code for include. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"

/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
/* Start user code for pragma. Do not edit comment generated here */

/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
unsigned int count = 10;
unsigned int sw = 9;
int swflag = 0;
long w;
int t = 0;
unsigned int timerflag = 0;
void seg(void);
/* End user code. Do not edit comment generated here */
void R_MAIN_UserInit(void);
/***********************************************************************************************************************
* Function Name: main
* Description  : This function implements main function.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
void main(void)
{
    R_MAIN_UserInit();
    /* Start user code. Do not edit comment generated here */
    R_TAU0_Channel0_Start();
    R_TAU0_Channel2_Start();
    while (1U)
    {
    seg();	
	if(swflag == 1){
		if(sw < 9 && sw >= 0){
		    sw++;
		}
		    swflag = 0;
        }else if(swflag == 2){
		if(sw < 10 && sw > 0){
		    sw--;
		}
		    swflag = 0;
    }
	
	if(timerflag == 2){
		timerflag = 0;
	}
		
    }
}
    /* End user code. Do not edit comment generated here */
/***********************************************************************************************************************
* Function Name: R_MAIN_UserInit
* Description  : This function adds user code before implementing main function.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
void R_MAIN_UserInit(void)
{
    /* Start user code. Do not edit comment generated here */
    EI();
    /* End user code. Do not edit comment generated here */
}

/* Start user code for adding. Do not edit comment generated here */
void seg(void){
	switch(sw){
		
		case 9:
			P2_bit.no2 = 1;
			P2_bit.no3 = 0;
			P2_bit.no4 = 0;
			P2_bit.no5 = 1;
			break;
		case 8:	
			P2_bit.no2 = 1;
			P2_bit.no3 = 0;
			P2_bit.no4 = 0;
			P2_bit.no5 = 0;
			break;
		case 7:
			P2_bit.no2 = 0;
			P2_bit.no3 = 1;
			P2_bit.no4 = 1;
			P2_bit.no5 = 1;
			break;
		case 6:
			P2_bit.no2 = 0;
			P2_bit.no3 = 1;
			P2_bit.no4 = 1;
			P2_bit.no5 = 0;
			break;
		case 5:
			P2_bit.no2 = 0;
			P2_bit.no3 = 1;
			P2_bit.no4 = 0;
			P2_bit.no5 = 1;
			break;
		case 4:
			P2_bit.no2 = 0;
			P2_bit.no3 = 1;
			P2_bit.no4 = 0;
			P2_bit.no5 = 0;
			break;
		case 3:
			P2_bit.no2 = 0;
			P2_bit.no3 = 0;
			P2_bit.no4 = 1;
			P2_bit.no5 = 1;
			break;
		case 2:
			P2_bit.no2 = 0;
			P2_bit.no3 = 0;
			P2_bit.no4 = 1;
			P2_bit.no5 = 0;
			break;
		case 1:
			P2_bit.no2 = 0;
			P2_bit.no3 = 0;
			P2_bit.no4 = 0;
			P2_bit.no5 = 1;
			break;
		case 0:
			P2_bit.no2 = 0;
			P2_bit.no3 = 0;
			P2_bit.no4 = 0;
			P2_bit.no5 = 0;
			break;
		default:
			swflag = 0;
			break;
	}
}




タイマー割り込みプログラム


Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_timer.h"
/* Start user code for include. Do not edit comment generated here */
int now = 0;
int now2 = 0;
int old = 0;
int old2 = 0;
int swc = 0;
int swc2 = 0;
extern int swflag;
extern unsigned int count;
extern unsigned int timerflag;
extern unsigned int sw;
extern int t;
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"

/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
#pragma interrupt r_tau0_channel0_interrupt(vect=INTTM00)
#pragma interrupt r_tau0_channel1_interrupt(vect=INTTM01)
#pragma interrupt r_tau0_channel2_interrupt(vect=INTTM02)
/* Start user code for pragma. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
* Function Name: r_tau0_channel0_interrupt
* Description  : This function is INTTM00 interrupt service routine.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
static void __near r_tau0_channel0_interrupt(void)
{
    /* Start user code. Do not edit comment generated here */
       	if(count < 1){
		if(timerflag < 2){
		
		switch(sw){
		
		case 9:
			t = 10;
			break;
		case 8:	
			t = 11;
			break;
		case 7:
			t = 13;
			break;
		case 6:
			t = 14;
			break;
		case 5:
			t = 17;
			break;
		case 4:
			t = 20;
			break;
		case 3:
			t = 25;
			break;
		case 2:
			t = 30;
			break;
		case 1:
			t = 50;
			break;
		case 0:
			t = 100;
			break;
		default:
			break;
			}
		count = t;
		timerflag++;
		if(timerflag < 2){
			P6_bit.no3 = 0;
		}else{
			P6_bit.no3 = 1;
	
		  
	}
	}
	}
	count--;
    
		
    /* End user code. Do not edit comment generated here */
}

/***********************************************************************************************************************
* Function Name: r_tau0_channel1_interrupt
* Description  : This function is INTTM01 interrupt service routine.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
static void __near r_tau0_channel1_interrupt(void)
{
    /* Start user code. Do not edit comment generated here */
 
    /* End user code. Do not edit comment generated here */
}

/***********************************************************************************************************************
* Function Name: r_tau0_channel2_interrupt
* Description  : This function is INTTM02 interrupt service routine.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
static void __near r_tau0_channel2_interrupt(void)
{
    /* Start user code. Do not edit comment generated here */
   if(P5_bit.no5){
    	now == P5_bit.no2;
    	if(now != P5_bit.no2){
	    now == P5_bit.no2;
	    if(now != P5_bit.no2){
    		if(now == old){	
			if(swc < 40){
				swc++;
				old = now;
			}else{
				swflag = 1;
				swc = 0;
			}
    		}
    	}
    }
   	now2 == P5_bit.no3;
   	if(now2 != P5_bit.no3){
	   now2 == P5_bit.no3;
	   if(now2 != P5_bit.no3){
   		if(now2 == old){
			if(swc2 < 40){	
				swc2++;
				old2 = now2;
			}else{
				swflag = 2;
				swc2 = 0;
			}
		}
   		}	
   	}
   }	








プロジェクト名 test_serial1


test_2の内容に加え以下の機能を追加 パソコン側はteratermを使用 1.電源をONするとオープニングメッセージを表示 2.パソコン側から's'コマンドを入力。"OK"を表示し、パルススタート。すでに出力されている場合は"NG"を  表示する。 3.パソコン側から'e'コマンドを入力。"PULSE END"を表示し、パルス出力ストップ。出力されていない場合は  "NG"を表示する。 4.パソコン側から'u'コマンドを入力。7セグメントLEDの数字をカウントアップする。 5.パソコン側から'd'コマンドを入力。7セグメントLEDの数字をカウントダウンする。 6.パソコン側から'm'コマンドを入力。その後、エンターキーを押すと"INPUT NUMBER1~9"と表示される。  その後、1~9の数字を入力すると、7セグメントLEDに入力した数字を表示する。




メインプログラム




Includes ***********************************************************************************************************************/ #include "r_cg_macrodriver.h" #include "r_cg_cgc.h" #include "r_cg_port.h" #include "r_cg_serial.h" #include "r_cg_timer.h" /* Start user code for include. Do not edit comment generated here */ /* End user code. Do not edit comment generated here */ #include "r_cg_userdefine.h" /*********************************************************************************************************************** Pragma directive ***********************************************************************************************************************/ /* Start user code for pragma. Do not edit comment generated here */ /* End user code. Do not edit comment generated here */ /*********************************************************************************************************************** Global variables and functions ***********************************************************************************************************************/ /* Start user code for global. Do not edit comment generated here */ int swflag = 0; //スイッチ判定変数 int t = 0; int stup = 1; int c = 0; unsigned int timerflag = 0; //パルス1、パルス2周期調整変数 unsigned int count = 0; //周期調整関数 unsigned int sw = 9; //7セグ表示変数 extern volatile uint8_t g_rx_buff[16]; //受信用バッファ extern volatile uint8_t g_tx_buff[16]; //送信用バッファ extern volatile uint8_t Send_data; //送信データ格納 extern volatile signed char Pulse_flag_Start; //パルス判定フラグ extern volatile signed char Pulse_flag_End; //パルスストップ判定フラグ void seg(void); //メカニカルスイッチ7セグ操作関数 void P_Start(void); //パルス発生関数 void P_End(void); //パルス終了関数 void Data_Print(char *); //メッセージ送信用関数 /* End user code. Do not edit comment generated here */ void R_MAIN_UserInit(void); /*********************************************************************************************************************** * Function Name: main * Description : This function implements main function. * Arguments : None * Return Value : None ***********************************************************************************************************************/ void main(void) { R_MAIN_UserInit(); /* Start user code. Do not edit comment generated here */ R_TAU0_Channel0_Start(); R_TAU0_Channel2_Start(); while (1U) { if(P5_bit.no5){ if(stup){ Data_Print("Hello World"); Data_Print("\r\n"); stup = 0; } }else{ stup = 1; } seg(); if(swflag == 1){ sw++; swflag = 0; }else if(swflag == 2){ sw--; swflag = 0; } if(timerflag == 2){ timerflag = 0; } } /* End user code. Do not edit comment generated here */ } /*********************************************************************************************************************** * Function Name: R_MAIN_UserInit * Description : This function adds user code before implementing main function. * Arguments : None * Return Value : None ***********************************************************************************************************************/ void R_MAIN_UserInit(void) { /* Start user code. Do not edit comment generated here */ R_UART0_Start(); R_UART0_Receive((uint8_t *)g_rx_buff[0],0x01); EI(); /* End user code. Do not edit comment generated here */ } /* Start user code for adding. Do not edit comment generated here */ void seg(void){ switch(sw){ case 9: P2_bit.no2 = 1; P2_bit.no3 = 0; P2_bit.no4 = 0; P2_bit.no5 = 1; break; case 8: P2_bit.no2 = 1; P2_bit.no3 = 0; P2_bit.no4 = 0; P2_bit.no5 = 0; break; case 7: P2_bit.no2 = 0; P2_bit.no3 = 1; P2_bit.no4 = 1; P2_bit.no5 = 1; break; case 6: P2_bit.no2 = 0; P2_bit.no3 = 1; P2_bit.no4 = 1; P2_bit.no5 = 0; break; case 5: P2_bit.no2 = 0; P2_bit.no3 = 1; P2_bit.no4 = 0; P2_bit.no5 = 1; break; case 4: P2_bit.no2 = 0; P2_bit.no3 = 1; P2_bit.no4 = 0; P2_bit.no5 = 0; break; case 3: P2_bit.no2 = 0; P2_bit.no3 = 0; P2_bit.no4 = 1; P2_bit.no5 = 1; break; case 2: P2_bit.no2 = 0; P2_bit.no3 = 0; P2_bit.no4 = 1; P2_bit.no5 = 0; break; case 1: P2_bit.no2 = 0; P2_bit.no3 = 0; P2_bit.no4 = 0; P2_bit.no5 = 1; break; case 0: P2_bit.no2 = 0; P2_bit.no3 = 0; P2_bit.no4 = 0; P2_bit.no5 = 0; break; default: swflag = 0; break; } } /* パルス発生関数 */ void P_Start(void){ if(timerflag < 2){ P6_bit.no3 = 0; //P6_bit.no2 = 1; }else{ P6_bit.no3 = 1; //P6_bit.no2 = 0; } Pulse_flag_Start = 1; Pulse_flag_End = 0; } /* */ /* パルス終了関数 */ void P_End(void){ P6_bit.no3 = 1; P6_bit.no2 = 1; Pulse_flag_Start = 0; Pulse_flag_End = 1; } /* */ /* メッセージ送信関数 */ void Data_Print(char *str){ signed char i = 0; while(*str != '\0'){ while(SSR00 & 0x0020U){ NOP(); } g_tx_buff[i] = *str; ; TXD0 = g_tx_buff[i]; str++; i++; } }


タイマー割り込み部分



Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_timer.h"
/* Start user code for include. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"

/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
#pragma interrupt r_tau0_channel0_interrupt(vect=INTTM00)
#pragma interrupt r_tau0_channel1_interrupt(vect=INTTM01)
#pragma interrupt r_tau0_channel2_interrupt(vect=INTTM02)
/* Start user code for pragma. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
/* Start user code for global. Do not edit comment generated here */
volatile int now;
volatile int old;
volatile int now2;
volatile int old2;
volatile int swc;
volatile int swc2;
extern int swflag;		
extern int t;
extern volatile signed char Pulse_flag_End;
extern unsigned int timerflag;
extern unsigned int count;
extern volatile unsigned int sw; 
/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
* Function Name: r_tau0_channel0_interrupt
* Description  : This function is INTTM00 interrupt service routine.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
static void __near r_tau0_channel0_interrupt(void)
{
    /* Start user code. Do not edit comment generated here */
           	if(count < 1){
		if(timerflag < 2){
		
		switch(sw){
		
		case 9:
			t = 10;
			break;
		case 8:	
			t = 11;
			break;
		case 7:
			t = 13;
			break;
		case 6:
			t = 14;
			break;
		case 5:
			t = 17;
			break;
		case 4:
			t = 20;
			break;
		case 3:
			t = 25;
			break;
		case 2:
			t = 30;
			break;
		case 1:
			t = 50;
			break;
		case 0:
			t = 100;
			break;
		default:
			break;
			}
		count = t;
		timerflag++;
		if(Pulse_flag_End == 0){
		if(timerflag < 2){
			P6_bit.no3 = 0;
			P6_bit.no2 = 1;
		}else{
			P6_bit.no3 = 1;
			P6_bit.no2 = 0;
		}
		}
	}
	}
	count--;
    /* End user code. Do not edit comment generated here */
}

/***********************************************************************************************************************
* Function Name: r_tau0_channel1_interrupt
* Description  : This function is INTTM01 interrupt service routine.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
static void __near r_tau0_channel1_interrupt(void)
{
    /* Start user code. Do not edit comment generated here */
    /* End user code. Do not edit comment generated here */
}

/***********************************************************************************************************************
* Function Name: r_tau0_channel2_interrupt
* Description  : This function is INTTM02 interrupt service routine.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
static void __near r_tau0_channel2_interrupt(void)
{
    /* Start user code. Do not edit comment generated here */
       if(P5_bit.no5){
    	now == P5_bit.no2;
    	if(now != P5_bit.no2){
	    now == P5_bit.no2;
	    if(now != P5_bit.no2){
    		if(now == old){	
			if(swc < 40){
				swc++;
				old = now;
			}else{
				swflag = 1;
				swc = 0;
			}
    		}
    	}
    }
   	now2 == P5_bit.no3;
   	if(now2 != P5_bit.no3){
	   now2 == P5_bit.no3;
	   if(now2 != P5_bit.no3){
   		if(now2 == old){
			if(swc2 < 40){	
				swc2++;
				old2 = now2;
			}else{
				swflag = 2;
				swc2 = 0;
			}
		}
   		}	
   	}
   }	
    /* End user code. Do not edit comment generated here */
}


シリアル割り込みプログラム



Includes
***********************************************************************************************************************/
#include "r_cg_macrodriver.h"
#include "r_cg_serial.h"
/* Start user code for include. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */
#include "r_cg_userdefine.h"

/***********************************************************************************************************************
Pragma directive
***********************************************************************************************************************/
#pragma interrupt r_uart0_interrupt_send(vect=INTST0)
#pragma interrupt r_uart0_interrupt_receive(vect=INTSR0)
/* Start user code for pragma. Do not edit comment generated here */
/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
Global variables and functions
***********************************************************************************************************************/
extern volatile uint8_t * gp_uart0_tx_address;         /* uart0 send buffer address */
extern volatile uint16_t  g_uart0_tx_count;            /* uart0 send data number */
extern volatile uint8_t * gp_uart0_rx_address;         /* uart0 receive buffer address */
extern volatile uint16_t  g_uart0_rx_count;            /* uart0 receive data number */
extern volatile uint16_t  g_uart0_rx_length;           /* uart0 receive data length */
/* Start user code for global. Do not edit comment generated here */
//extern volatile uint8_t work;
volatile uint8_t receive_data;			//��M�f�[�^�i�[
volatile void receive_command(uint8_t);		//�R�}���h��͊֐�
volatile signed char Pulse_flag_Start = 0;	//�p���X�X�^�[�g����t���O
volatile signed char Pulse_flag_End = 0;	//�p���X�X�g�b�v����t���O
volatile uint8_t g_rx_buff[16];			//��M�p�o�b�t�@
volatile uint8_t g_tx_buff[16]; 		//���M�p�o�b�t�@
volatile signed char fiover = 1;
extern volatile unsigned int sw;
extern void P_Start(void);			//���C���v���O�����p���X�����p�֐�
extern void P_End(void);			//���C���v���O�����p���X�I��
extern void Data_Print(char *);
/* End user code. Do not edit comment generated here */

/***********************************************************************************************************************
* Function Name: r_uart0_interrupt_receive
* Description  : This function is INTSR0 interrupt service routine.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
static void __near r_uart0_interrupt_receive(void)
{
    volatile uint8_t rx_data;
    volatile uint8_t err_type;
    
    err_type = (uint8_t)(SSR01 & 0x0007U);
    SIR01 = (uint16_t)err_type;

    if (err_type != 0U)
    {
        r_uart0_callback_error(err_type);
    }
    	
    	rx_data = RXD0;
        g_rx_buff[0] = RXD0; 

    if (g_uart0_rx_length > g_uart0_rx_count)
    {
        *gp_uart0_rx_address = rx_data;
        gp_uart0_rx_address++;
        g_uart0_rx_count++;

        if (g_uart0_rx_length == g_uart0_rx_count)
        {
            r_uart0_callback_receiveend();
        }
    }
    else
    {
        r_uart0_callback_softwareoverrun(rx_data);
    }
}

/***********************************************************************************************************************
* Function Name: r_uart0_interrupt_send
* Description  : This function is INTST0 interrupt service routine.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
static void __near r_uart0_interrupt_send(void)
{
    if (g_uart0_tx_count > 0U)
    {
        TXD0 = *gp_uart0_tx_address;
        gp_uart0_tx_address++;
        g_uart0_tx_count--;
    }
    else
    {
        r_uart0_callback_sendend();
    }
}

/***********************************************************************************************************************
* Function Name: r_uart0_callback_receiveend
* Description  : This function is a callback function when UART0 finishes reception.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
static void r_uart0_callback_receiveend(void)
{
    /* Start user code. Do not edit comment generated here */
    R_UART0_Receive((uint8_t *)g_rx_buff,0x01);
    receive_data = g_rx_buff[0];
    receive_command(receive_data);
    /* End user code. Do not edit comment generated here */
}

/***********************************************************************************************************************
* Function Name: r_uart0_callback_softwareoverrun
* Description  : This function is a callback function when UART0 receives an overflow data.
* Arguments    : rx_data -
*                    receive data
* Return Value : None
***********************************************************************************************************************/
static void r_uart0_callback_softwareoverrun(uint16_t rx_data)
{
    /* Start user code. Do not edit comment generated here */
   if(fiover){
	    fiover = 0;
	    r_uart0_callback_receiveend();
    }else{
	    Data_Print("Over Error");
    }
    /* End user code. Do not edit comment generated here */
}

/***********************************************************************************************************************
* Function Name: r_uart0_callback_sendend
* Description  : This function is a callback function when UART0 finishes transmission.
* Arguments    : None
* Return Value : None
***********************************************************************************************************************/
static void r_uart0_callback_sendend(void)
{
    /* Start user code. Do not edit comment generated here */
    /* End user code. Do not edit comment generated here */
}

/***********************************************************************************************************************
* Function Name: r_uart0_callback_error
* Description  : This function is a callback function when UART0 reception error occurs.
* Arguments    : err_type -
*                    error type value
* Return Value : None
***********************************************************************************************************************/
static void r_uart0_callback_error(uint8_t err_type)
{
    /* Start user code. Do not edit comment generated here */
    /* End user code. Do not edit comment generated here */
}

/* Start user code for adding. Do not edit comment generated here */
volatile void receive_command(uint8_t a){
	
	volatile uint8_t b = 0x00;
	
	if(a == 0x53 || a ==0x73){
		if(Pulse_flag_Start == 0){
			P_Start();
			Data_Print("OK");
			Data_Print("\r\n");
		}else{
			Data_Print("NG");
			Data_Print("\r\n");
		}
	}else if(a == 0x65){
		if(Pulse_flag_End == 0){
		P_End();
		Data_Print("PULSE END");
		Data_Print("\r\n");
		}else{
			Data_Print("NG");
			Data_Print("\r\n");
		}
	}else if(a == 0x75){
		if(sw >= 0 && sw < 9){
			sw++;
		}
	}else if(a == 0x64){
		if(sw > 0 && sw < 11){
			sw--;
		}
	}else if(a == 0x6d){
		while(b != 0x0d){
			b = RXD0;
		}
		b = 0x00;
		Data_Print("INPUT_NUMBER1~9");
		Data_Print("\r\n");
		while(b < 0x30 || b > 0x40){	
			b = RXD0;
		}
		b -= 0x30;
		sw = b;
	}
}





以上です。




今日の成果

今回はまとめを行おうと思います。明日行うように指示をいただいたのですが、明日は外出予定が入っており、投稿できそうにありません。

本格的にマイコンのプログラムにかかわったのは、初めてだったので、戸惑うことも多く覚えることも多いですが、早く習得できるように努力していきます。
前回、ブログに掲載したシリアル通信のプログラムは、送信割り込みを使っていません。ゴールデンウィーク明けからは、送信割り込みを使ったタイプのものを作成する予定です。その次はI2Cに挑戦していきます。
シリアルドライバ回路図をアップしておきます。

スクリーンショット

プログラムは別で上げます。












今日の成果

今日は前回まで作っていた、仕様のプログラムが完成しました。
送信フラグレジスタの動きがよくわからずはまってしまっていましたが、何とか完成しました。プログラムは月末にまとめとして載せるようにとの指示ですので、また後日載せたいと思います。動作状況の動画を乗せたいと思います。
前回の追加点として、’m’を入力し、エンターを押すと、1~9の数字を入力するよう表示されるので、数字を入力。その数字に対応した7セグの表示を行うというものです。その他電源をONするとオープニングメッセージを送信しています。
また、7セグの表示に合わせて周波数も変えるようにしています。


今日の成果

今回は、PC側のコマンドに応じてターゲットボードの状態を変化するところまで行いました。まだ未完成ですが、動画を乗せておこうと思います。
PC側キーボードで’d’、’u’を押すと7セグの値がアップダウン。
’s’を押すと出力ポートからパルス発生、’e’を押すとパルス停止。そのほか、コマンドに対応した文字を送信するようにしています。

 

今日の成果

今回は、前回に引き続きシリアル通信を行いました。受信割り込みを使ってやろうと思っているのですが、CS+のコード生成を用いると、いっぱい生成されてどれか迷ってしまいます。まだまだスタートしたばかりでほとんど完成していませんが、完成したら動画を乗せようと思っています。
コード生成で生成されるコードも載せておこうと思います。
スクリーンショット (25)
スクリーンショット (26)
スクリーンショット (27)
スクリーンショット (28)


ほかの生成に比べて多いです。
アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

記事検索
最新コメント