/*
* FLEXIO UART DEMO USE CASE
* Rev1.0
* Demo will show the UART communication using the FlexIO module with following parameters:
* 8-bit communication
* One stop bit
* No parity
* No hardware flow control
* Baud rate: 115200
* Hardware used: S32K144 EVB
* PTA0: FlexIO_D2 as TX
* PTA1: FlexIO_D3 as RX
*/
#include "derivative.h" /* include peripheral declarations S32K144 */
void WDOG_Disable(void);
void Osc_Init (void);
void Busout_Cfg(void);
void PCC_Init(void);
void Flexio_Uart_Tx_Init(void);
void Flexio_Uart_Rx_Init(void);
char string[] = "\rHello World!!!\n\r";
char i=0;
char data=0;
int main(void)
{
int counter = 0;
WDOG_Disable();
/* Enable OSC on PTE4*/
Busout_Cfg();
/* Enable clocks in FLEXIO,PORTA,SCG*/
PCC_Init();
/*Init 8MHz board Extal*/
Osc_Init();
Flexio_Uart_Tx_Init();
Flexio_Uart_Rx_Init();
/* Enable FlexIO*/
FLEXIO->CTRL|=FLEXIO_CTRL_FLEXEN_MASK;
/* Send hello string*/
for (i=0;i<sizeof(string);i++)
{
/* Send each character*/
FLEXIO->SHIFTBUF[0]=string[i];
while((FLEXIO->SHIFTSTAT & 0b0001) ==0 );
}
for(;;) {
counter++;
/* Receive data from serial*/
while( !(FLEXIO->SHIFTSTAT&(1<<(1)<<FLEXIO_SHIFTSTAT_SSF_SHIFT))){};
data=FLEXIO->SHIFTBUFBYS[1];
/* Send data to serial*/
FLEXIO->SHIFTBUF[0]=data;
while( !(FLEXIO->SHIFTSTAT&(1<<(0)<<FLEXIO_SHIFTSTAT_SSF_SHIFT))){};
}
return 0;
}
void Flexio_Uart_Tx_Init(void)
{
PORTA->PCR[0]|=PORT_PCR_MUX(0b100); /* Select PTA0 MUX as FXIOD2 */
/* Shifter Configuration*/
FLEXIO->SHIFTCFG[0]|= FLEXIO_SHIFTCFG_SSTOP(0x03) /* Stop bit enable on logic 1*/
| FLEXIO_SHIFTCFG_SSTART(0x02); /* Start bit 0 before loading the data on first shift*/
FLEXIO->SHIFTCTL[0]|= FLEXIO_SHIFTCTL_TIMSEL(0X00) /* Select Timer 0*/
| FLEXIO_SHIFTCTL_TIMPOL(0x00) /* Shift on pos edge*/
| FLEXIO_SHIFTCTL_PINCFG(0x03) /* Shift as output*/
| FLEXIO_SHIFTCTL_PINSEL(0x02) /* FXIO D2 as Tx*/
| FLEXIO_SHIFTCTL_PINPOL(0x00) /* Pin active high*/
| FLEXIO_SHIFTCTL_SMOD(0x02); /* Shifter in Tx mode*/
/* Timer Configuration*/
FLEXIO->TIMCFG[0]|= FLEXIO_TIMCFG_TIMDEC(0x0) /* Counter Decrement of FlexIO clock*/
| FLEXIO_TIMCFG_TIMDIS(0x02) /* Timer disable on Timer compare*/
| FLEXIO_TIMCFG_TIMENA(0x02) /* Timer enable on trigger high*/
| FLEXIO_TIMCFG_TSTOP(0x02) /* Shifter to generate stop bit on timer compare*/
| FLEXIO_TIMCFG_TSTART(0x01); /* Enable start bit*/
FLEXIO->TIMCTL[0]|= FLEXIO_TIMCTL_TRGSEL(0x01) /* Trigger on shifter flag*/
| FLEXIO_TIMCTL_TRGPOL(0x01) /* Trigger active LOW*/
| FLEXIO_TIMCTL_TRGSRC(0x01) /* Internal Trigger*/
| FLEXIO_TIMCTL_PINSEL(0x02) /* Select FXIO D2*/
| FLEXIO_TIMCTL_PINCFG(0x00) /* FXDIO disabled*/
| FLEXIO_TIMCTL_TIMOD(0x01); /* Baud rate mode*/
/* Time Compare*/
FLEXIO->TIMCMP[0]=0x0F21; /* Baud rate at 115200*/
}
void Flexio_Uart_Rx_Init(void)
{
PORTA->PCR[1]|=PORT_PCR_MUX(0b100); /* Select PTA1 MUX as FXIOD3 */
/* Shifter Configuratio*/
FLEXIO->SHIFTCFG[1]|= FLEXIO_SHIFTCFG_INSRC(0x00) /* Pin Source*/
| FLEXIO_SHIFTCFG_SSTOP(0x03) /* Stop bit enable on logic 1*/
| FLEXIO_SHIFTCFG_SSTART(0x02); /* Start bit 0*/
FLEXIO->SHIFTCTL[1]|= FLEXIO_SHIFTCTL_TIMSEL(0x01) /* Select Timer 1*/
| FLEXIO_SHIFTCTL_TIMPOL(0x01) /* Shift on neg edge*/
| FLEXIO_SHIFTCTL_PINCFG(0x00) /* Pin disabled*/
| FLEXIO_SHIFTCTL_PINSEL(0x03) /* FXIO D3*/
| FLEXIO_SHIFTCTL_PINPOL(0x00) /* Pin active high*/
| FLEXIO_SHIFTCTL_SMOD(0x01); /* Shifter in Rx mode*/
/*Timer Configuration*/
FLEXIO->TIMCFG[1]|= FLEXIO_TIMCFG_TIMDEC(0x0) /* Counter Decrement of FlexIO clock*/
| FLEXIO_TIMCFG_TIMDIS(0x02) /* Timer disable on Timer compare*/
| FLEXIO_TIMCFG_TIMENA(0x04) /* Timer enable on pin rising edge*/
| FLEXIO_TIMCFG_TSTOP(0x02) /* Shifter to generate stop bit on timer compare*/
| FLEXIO_TIMCFG_TSTART(0x01); /* Enable start bit*/
FLEXIO->TIMCTL[1]|= FLEXIO_TIMCTL_TRGSEL(0b0010) /* Trigger on input pin 3 */
|FLEXIO_TIMCTL_TRGPOL(0x00) /* Trigger active LOW*/
|FLEXIO_TIMCTL_TRGSRC(0x01) /* Internal Trigger*/
|FLEXIO_TIMCTL_PINSEL(0x03) /* Select FXIO D3*/
|FLEXIO_TIMCTL_PINPOL(0x01) /* PIN pol low*/
|FLEXIO_TIMCTL_PINCFG(0x00) /* FXDIO disabled*/
|FLEXIO_TIMCTL_TIMOD(0x01); /* Baud rate mode*/
/*Timer Compare*/
FLEXIO->TIMCMP[1]=0x0F21; /* Baud rate at 115200*/
}
void WDOG_Disable(void)
{
WDOG->CNT = 0xD928C520; // unlock watchdog
WDOG->TOVAL = 0x0000FFFF; // maximum timeout value
WDOG->CS = 0x00002100; // disable watchdog
}
void PCC_Init(void)
{
PCC->PCCn[PCC_SCG_INDEX ]|=PCC_PCCn_CGC_MASK; /* Enable clock for SCG */
PCC->PCCn[PCC_FLEXIO_INDEX ]|=PCC_PCCn_PCS(0b01); /*OSC clock for FlexIO */
PCC->PCCn[PCC_FLEXIO_INDEX ]|=PCC_PCCn_CGC_MASK; /* Enable clock for FlexIO */
PCC->PCCn[PCC_PORTA_INDEX ]|=PCC_PCCn_CGC_MASK; /* Enable clock for PORTA */
}
void Osc_Init (void)
{
/* SOSC Configuration */
SCG->SOSCDIV = 0x00010101u; /* SCG_SOSCDIV: SOSCDIV3=1, SOSCDIV2=1, SOSCDIV1=1 */
SCG->SOSCCFG = 0x00000024u; /* SCG_SOSCCFG: RANGE=2, EREFS=1 */
while(SCG->SOSCCSR & 0x00800000u); /* Control and status register can be written?*/
SCG->SOSCCSR= 0x5u; /* SCG_SOSCCSR: SOSCLPEN=1, SOSCEN=1 */
while(!(SCG->SOSCCSR & 0x01000000u));
}
void Busout_Cfg(void)
{
PCC->PCCn[PCC_PORTE_INDEX ]|=PCC_PCCn_CGC_MASK; /* Enable clock for PORTC */
PORTE->PCR[4] = 0x01000240; // configure Pin PTE4 as CLKOUT
}
没有合适的资源?快使用搜索试试~ 我知道了~
资源详情
资源评论
资源推荐
收起资源包目录
S32K144_EVB_FlexIO_UART.zip (46个子文件)
S32K144_EVB_FlexIO_UART
S32K144_EVB_FlexIO_UART
include
derivative.h 204B
core_cm4.h 106KB
S32K144.h 1012KB
startup.h 2KB
Platform_Types.h 6KB
core_cmFunc.h 16KB
core_cmInstr.h 20KB
core_cm4_simd.h 22KB
system_S32K144.h 11KB
.settings
com.freescale.s32ds.cross.sdk.support.prefs 160B
language.settings.xml 2KB
com.processorexpert.core.ide.newprojectwizard.prefs 87B
src
S32K144_EVB_FlexIO_UART.c 6KB
.project 801B
.cproject 39KB
Project_Settings
Startup_Code
system_S32K144.c 4KB
startup_S32K144.S 19KB
startup.c 5KB
Linker_Files
S32K144_100_flash.ld 8KB
S32K1xx_ram.ld 7KB
Debugger
S32K144_EVB_FlexIO_Debug.launch 16KB
S32K144_EVB_FlexIO_Release.launch 16KB
Debug
S32K144_EVB_FlexIO.elf 786KB
sources.mk 1KB
S32K144_EVB_FlexIO.map 36KB
objects.mk 276B
S32K144_EVB_FlexIO_UART.args 548B
S32K144_EVB_FlexIO_UART.map 37KB
S32K144_EVB_FlexIO.args 458B
src
S32K144_EVB_FlexIO_UART.o 747KB
subdir.mk 1KB
S32K144_EVB_FlexIO_UART.args 267B
S32K144_EVB_FlexIO.args 267B
S32K144_EVB_FlexIO_UART.d 167B
makefile 2KB
makefile.local 379B
Project_Settings
Startup_Code
startup.d 245B
subdir.mk 3KB
startup.o 744KB
startup_S32K144.o 7KB
system_S32K144.args 267B
system_S32K144.d 213B
system_S32K144.o 742KB
startup_S32K144.args 206B
startup.args 267B
Linker_Files
subdir.mk 661B
共 46 条
- 1
APei
- 粉丝: 65
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0