📄 dma_sio_rcv.c
字号:
/* FILE COMMENT **************************************************** * M32R C Programming Rev. 1.00 * < Sample Program for Serial I/O (UART) DMAC Receive > * * Copyright (c) 2003 Renesas Technology Corporation * And Renesas Solutions Corporation * All Rights Reserved **********************************************************************//************************************************************************//* Include file *//************************************************************************/#include "..\inc\sfr32170_pragma.h"/************************************************************************//* Definition of external reference *//************************************************************************/extern void DisInt( void ); /* Interrupt disable function */extern void EnInt( void ); /* Interrupt enable function *//************************************************************************//* Function prototype declaration *//************************************************************************/ void main(void); /* Main function */ void init_func(void); /* Initial setup function */ void port_init(void); /* Initialize port */ void dma_init(void); /* Initialize DMA */ void sio0rcv_init( void); /* Initial setup serial I/O *//************************************************************************//* Define macro *//************************************************************************//* Setting serial IO */ /* 0123 4567 */#define P8MOD_SCI0 (unsigned char)0x30 /* 0011 0000B P8 operation mode register */ /* |||| |||+--- P87 */ /* |||| ||+---- P86 */ /* |||| |+----- P85 */ /* |||| +------ P84 */ /* |||+-------- RXD0 */ /* ||+--------- TXD0 */ /* ++---------- don't care */ /* 0123 4567 */#define SnTCNT_INI (unsigned char)0x00 /* 0000 0000B SIOn transmit control register */ /* |||| |||+--- Disable transmission */ /* |||| +++---- don't care */ /* ||++-------- f(BCLK) */ /* ++---------- don't care */ /* 0123 4567 */#define SnMOD_INI (unsigned char)0x20 /* 0010 0000B SIOn mode register */ /* |||| |||+--- Sleep function disabled */ /* |||| ||+---- Parity inhibited */ /* |||| |+----- don't care(odd) */ /* |||| +------ 1 stop bit */ /* |||+-------- Internal clock */ /* +++--------- 8-bit UART *//* Setting baud rate (Be sure to check actually set value when using) */#define XIN 10 /* 10MHz */#define BAUD_19200 (unsigned char)(XIN * 2000000 / 16 / 19200 - 1) /* 19200bps *//* DMAC setting data */ /* 0123 4567 */#define DMA4_INIT (unsigned char)0x2d /* 0010 1101B DMA4 channel control register */ /* |||| |||+--- Destination address incremented */ /* |||| ||+---- Source address fixed */ /* |||| |+----- Transfer size of 8-bit */ /* |||| +------ Transfer enabled */ /* ||++-------- 10: Start upon completion of serial I/O 0 reception */ /* |+---------- No transfer request */ /* +----------- Normal mode *//************************************************************************//* Global variable *//************************************************************************/ unsigned char RcvBuf0[256]; /* Receive buffer *//*""FUNC COMMENT""******************************************************* * Function name : init_func() *----------------------------------------------------------------------- * Description : Initialize ICU *----------------------------------------------------------------------- * Argument : - *----------------------------------------------------------------------- * Returns : - *----------------------------------------------------------------------- * Notes : *""FUNC COMMENT END""***************************************************/void init_func(void){ port_init(); /* Initialize those related to port */ dma_init(); /* Initialize DMA */ sio0rcv_init(); /* Initial setup serial I/O */}/*""FUNC COMMENT""******************************************************* * Function name :port_init() *----------------------------------------------------------------------- * Description :Initialize port *----------------------------------------------------------------------- * Argument : - *----------------------------------------------------------------------- * Returns : - *----------------------------------------------------------------------- * Notes : *""FUNC COMMENT END""***************************************************/void port_init(void){ PIEN = PIEN0; /* Enable port input *//*** LED output port ***/ P11DATA = 0x00; /* Output data (must be set prior to mode) */ P11DIR = 0xff; /* P110-P117 : Output mode */ P11MOD = 0x00; /* P110-P117 : Input/output port */}/*""FUNC COMMENT""******************************************************* * Function name : dma_init() *----------------------------------------------------------------------- * Description : - Initialize DMAC * : DMA4: Transfer received data of the SIO0 receive * : buffer to the internal RAM *----------------------------------------------------------------------- * Argument : - *----------------------------------------------------------------------- * Returns : - *----------------------------------------------------------------------- * Notes : Restart is required if the transfers size is 256 bytes or more *""FUNC COMMENT END""***************************************************/void dma_init(void){/*** DMA4 initial setting ***/ DM04ITST = ~DMITST4; /* Clear DMA4 interrupt request */ DM04ITMK |= DMITMK4; /* Inhibit DMA4 interrupt */ DM4SA = (unsigned short)&S0RXB_L; /* Source address -> SIO0 receive buffer */ DM4DA = (unsigned short)&RcvBuf0; /* Destination address -> RAM buffer */ DM4TCT = 0xff; /* Number of DMA4 transfer (256 times) */ DM4CNT = DMA4_INIT; /* Start upon the completion of the serial I/O0 reception, enable transfer */}/*""FUNC COMMENT""******************************************************* * Function name : sio0rcv_init() *----------------------------------------------------------------------- * Description : Set 8-bit UART reception for SIO0 *----------------------------------------------------------------------- * Argument : - *----------------------------------------------------------------------- * Returns : - *----------------------------------------------------------------------- * Notes : Port input function must be enabled * : No transmission setting has done * : For M32R/E#1,2,3, PnMOD cannot be accessed for R/M/W * : The function must be executed while interrupt is inhibited *""FUNC COMMENT END""***************************************************/void sio0rcv_init( void){/*** Setting transfer mode */ S0RCNT = 0x00; /* Disable reception */ S0TCNT = SnTCNT_INI; /* f(BCLK) and disable transmission */ P8MOD |= P8MOD_SCI0; /* Set P8 for SCIO mode */ S0MOD = SnMOD_INI; /* Set data format */ S0BAUR = BAUD_19200; /* Set baud rate *//*** interrupt related settings ***/ ISIO0RXCR = (unsigned char)7; /* Set SIO0 receive interrupt priority level */ SI03SEL &= ~ISR0; /* Select receive-finished interrupt */ SI03MASK &= ~R0MASK; /* Enable SIO0 receive interrupt request *//*** Starting reception ***/ S0RCNT |= REN; /* Enable reception */}/*""FUNC COMMENT""******************************************************* * Function name : main() *----------------------------------------------------------------------- * Description : Serial receive data is stored in RAM by DMA transfer * : - Start DMA4 upon reception of serial I/O0 * : - Receive data is stored in buffer by DMA * : - Output DMA4's transfer counter * : (number of receive bytes) to LED (PORT11) *----------------------------------------------------------------------- * Argument : - *----------------------------------------------------------------------- * Returns : - *----------------------------------------------------------------------- * Notes : Interrupt is not actually used * : LED display is (255-number of receive bytes) *""FUNC COMMENT END""***************************************************/void main(void){/*** Initialize microcomputer ***/ DisInt(); /* Disable interrupt */ init_func(); EnInt(); /* Enable interrupt */ while(1) { P11DATA = DM4TCT; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -