忘備録-備忘録

技術的な備忘録

広告

※このエリアは、60日間投稿が無い場合に表示されます。記事を投稿すると、表示されなくなります。

RS232C通信プログラム1

2015-03-27 08:53:50 | RX62N
RX62N用のRS232C通信プログラムです。割り込みを利用しません。
/***********************************************************************/
/*                                                                     */
/*  FILE        :RS232Ctest.c                                          */
/*  DATE        :Thu, Jul 12, 2012                                     */
/*  DESCRIPTION :Main Program                                          */
/*  CPU TYPE    :RX62N                                                 */
/*                                                                     */
/*  This file is generated by KPIT GNU Project Generator.              */
/*                                                                     */
/***********************************************************************/
                    
																							
																							
#include "iodefine.h"

/******************************************************************************
* Function Name: InitSCI
* Description  : Initializes SCI channel for asychronous operation
* Arguments    : none
* Return Value : none
******************************************************************************/
void InitSCI(void)
{    
	/* Enable SCI0 */
	MSTP(SCI0) = 0;
   
	/* RxD0 is input */
	PORT2.DDR.BIT.B1 = 0;
	/* Enable Input Buffer on RxD1 */
	PORT2.ICR.BIT.B1 = 1;
	/* TxD0 is output */
 	PORT2.DDR.BIT.B0 = 1;

	/* Disable Tx/Rx */
	SCI0.SCR.BYTE = 0;
    
	/*  Set mode register
		-Asynchronous Mode
		-8 bits
		-no parity
		-1 stop bit
		-PCLK clock (n = 0) */
	SCI0.SMR.BYTE = 0x00;
	//SCI0.SEMR.BIT.ABCS = 1;
	/* Enable RXI and TXI interrupts, even though we are not
		using the interrupts, we will be checking the IR bits
		as flags */
	//SCI0.SCR.BIT.RIE = 1;
	//SCI0.SCR.BIT.TIE = 1;
    
	/* Clear IR bits for TIE and RIE */
	//IR(SCI0, RXI0) = 0;
	//IR(SCI0, TXI0) = 0;
   
	/* Disable RXI and TXI interrupts in ICU because we are polling */
	//IEN(SCI0, RXI0) = 0;
	//IEN(SCI0, TXI0) = 0;
   
	/*  Set baud rate to 115200
		N = (PCLK Frequency) / (64 * 2^(2*n - 1) * Bit Rate) - 1
		N = (48,000,000) / (64 * 2^(2*0 - 1) * 115200) - 1
		N = 12
		38400bps N=38 */
	SCI0.BRR = 38;

	/* Enable Tx/Rx */
	SCI0.SCR.BYTE |= 0x30;
}

/******************************************************************************
* Function Name: charput
* Description  : Outputs a character on a serial port
* Arguments    : character to output
* Return Value : none
******************************************************************************/
void charput(unsigned char output_char)
{
	
	/* Wait for transmit buffer to be empty */
	//while(IR(SCI1, TXI1) == 0);
	while(SCI0.SSR.BIT.TDRE == 0);

	/* Clear TXI IR bit */
	//IR(SCI0, TXI0) = 0;

	/* Write the character out */
	SCI0.TDR = output_char;    
}

/******************************************************************************
* Function Name: charget
* Description  : Gets a character on a serial port
* Arguments    : character to output
* Return Value : none
******************************************************************************/
unsigned char charget(void)
{
	unsigned char temp;
    
	/* エラーチェック */
	if (SCI0.SSR.BYTE & 0x38) {
		SCI0.SSR.BYTE &= ~0x38;	//エラーフラグクリア
		temp = SCI0.RDR;
		return 0;
	}
	/* Read any 'junk' out of receive buffer */
	//temp = SCI0.RDR;
    
	/* Clear flag to receive next byte */
	//IR(SCI0, RXI0) = 0;
    
	/* Wait for next receive data */
	//while(IR(SCI1, RXI1) == 0);
	while(SCI0.SSR.BIT.RDRF == 0);
    
	/* Read data */
	temp = SCI0.RDR;
    
/*	// Echo data back out 
	if(temp == 0x0d)
	{
		// Enter was pressed, output newline 
		charput('\r');
		charput('\n');
	}
	else
	{
		// Echo back character 
		charput(temp);
	}
*/  
	// Receive data acquired, send back up 
	return temp;         
}

/* 文字列の出力 */
void printString(char *s)
{
	while( *s != 0 ) {
		charput(*s);
		s++;
	}
}

int main(void)
{
    // TODO: add application code here

	SYSTEM.SCKCR.BIT.ICK = 0x00;		//システムクロック x16 96MHz
	SYSTEM.SCKCR.BIT.PCK = 0x01;		//周辺クロック   x4  48MHz
	SYSTEM.SCKCR.BIT.BCK = 0x01;		//外部バスクロック x4  48MHz
	InitSCI();
	
	printString("Start\r\n");
    while (1) {
		charput(charget());
    }
  return 0;
}

コメント   この記事についてブログを書く
« i2c通信関数 | トップ | RS232C通信プログラム2 »
最新の画像もっと見る

コメントを投稿

RX62N」カテゴリの最新記事