嵌入式课程设计报告(5)

2019-03-09 22:24

//========================================================================= //函数名称:tpm_enable_int //功能概要:使能tpm模块中断。

//参数说明:tpmModule:模块号:0、1、2 //函数返回:无

//========================================================================= void tpm_enable_int(uint_8 tpmModule) { }

//========================================================================= //函数名称:tpm_disable_int //功能概要:禁止tpm模块初始化。 //参数说明:tpmModule:模块号:0、1、2 //函数返回:无

//========================================================================= void tpm_disable_int(uint_8 tpmModule) { }

//========================================================================= //函数名称:tpm_stop

//功能概要:禁止tpm模块。 //参数说明:tpmModule:模块号:0、1、2 //函数返回:无

//========================================================================= void tpm_stop(uint_8 tpmModule) { }

TPM_ARR[tpmModule]->SC&=~TPM_SC_CMOD(3); disable_irq(tpm0_irq_no + tpmModule); enable_irq(tpm0_irq_no + tpmModule);

4.6 串口通信子程序(uart.c)

//============================================================================ //文件名称:uart.c

//功能概要:uart底层驱动构件源文件

//版权所有:苏州大学飞思卡尔嵌入式中心(sumcu.suda.edu.cn)

18

//更新记录:2012-11-12 V1.0

//============================================================================ #include \

//串口1、2号地址映射

const UART_MemMapPtr UART_ARR[] = {UART1_BASE_PTR, UART2_BASE_PTR};

//打开MCGIRCLK时钟

static void MCGIRCLK_OutEnable(void);

//============================================================================ //函数名称:uart_init

//功能概要:初始化uart模块 //参数说明:uartNo:串口号:UART_0、UART_1、UART_2 // sel_clk:选择串口0时钟源:MCGIRCLK (4000Khz) // MCGPLL (48000Khz) //

BUSCLK (24000khz)

// baud:波特率:300、600、1200、2400、4800、9600、19200、115200... //函数返回:无

//说明: 当参数为UART_0时,sel_clk只能选择MCGIRCLK或MCGPLL,若选择内部时钟MCGIRCLK,

//波特率需小于19200; 当参数为UART_1或是UART_2时,sel_clk只能选择BUSCLK

//============================================================================ void uart_init (uint_8 uartNo,uint_32 sel_clk,uint_32 baud_rate) {

//局部变量声明 register uint_16 sbr; uint_8 temp; uint_32 clk_Khz;

UARTLP_MemMapPtr uartch1=UART0_BASE_PTR;//声明uartch1为UARTLP_MemMapPtr结构

体类型指针

UART_MemMapPtr uartch2; //声明uartch2为UART_MemMapPtr结构体类型指针 uartch2 = UART_ARR[uartNo-1]; //获得UART1、2模块相应口基地址

//根据带入参数uartNo,给局部变量uartch1赋值

19

时钟源

if(uartNo==0) {

switch(sel_clk) {

case MCGIRCLK:

//启用并选择UART0时钟源MCGIRCLK

MCGIRCLK_OutEnable(); //启用内部快速时钟

SIM_SOPT2 |= SIM_SOPT2_UART0SRC(0x3); //UART0选择MCGIRCLK=4000Khz

break;

case MCGPLL:

SIM_SOPT2 |= SIM_SOPT2_UART0SRC(1); //UART0选择

MCGFLLCLK_khz=48000Khz时钟源

//配置串口工作模式:8位无校验模式

sbr = (uint_16)((clk_Khz*1000)/(baud_rate * 16));

20

SIM_SOPT2 |= SIM_SOPT2_PLLFLLSEL_MASK; break;

default: }

//引脚复用为串口功能并启用串口模块时钟

PORTA_PCR14 = PORT_PCR_MUX(0x3); //使能UART0_TXD PORTA_PCR15 = PORT_PCR_MUX(0x3); //使能UART0_RXD SIM_SCGC4 |= SIM_SCGC4_UART0_MASK; //启动串口0时钟

//暂时关闭串口0发送与接收功能

uartch1->C2 &= ~(UART_C2_TE_MASK | UART_C2_RE_MASK); //根据时钟源选择时钟频率 if(MCGIRCLK == sel_clk)

clk_Khz = MCGFLL_CLK_KHZ; clk_Khz = MCGPLL_CLK_KHZ; else if (MCGPLL == sel_clk)

break;

} else {

temp = UART_BDH_REG(uartch1) & ~(UART_BDH_SBR(0x1F));

UART_BDH_REG(uartch1) = temp | UART_BDH_SBR(((sbr & 0x1F00) >> 8)); UART_BDL_REG(uartch1) = (uint_8)(sbr & UART_BDL_SBR_MASK); //初始化控制寄存器、清标志位 UART0_C4 = 0x0F; UART0_C1 = 0x00; UART0_C3 = 0x00; UART0_MA1 = 0x00; UART0_MA2 = 0x00; UART0_S1 |= 0x1F; UART0_S2 |= 0xC0; //启动发送接收

uartch1->C2 |= (UART_C2_TE_MASK | UART_C2_RE_MASK);

switch (uartNo) {

case UART_1:

PORTE_PCR0 = PORT_PCR_MUX(0x3); //使能UART1_TXD PORTE_PCR1 = PORT_PCR_MUX(0x3); //使能UART1_RXD SIM_SCGC4 |= SIM_SCGC4_UART1_MASK; //启动串口1时钟 break; case UART_2:

PORTE_PCR22 = PORT_PCR_MUX(0x4); //使能UART2_TXD PORTE_PCR23 = PORT_PCR_MUX(0x4); //使能UART2_RXD SIM_SCGC4 |= SIM_SCGC4_UART2_MASK;//启动串口2时钟 break; default:

//暂时关闭串口1、2发送与接收功能

uartch2->C2 &= ~(UART_C2_TE_MASK | UART_C2_RE_MASK);

21

break; //传参错误,返回

}

}

}

//配置波特率,KL25串口1、2时钟频率只能使用 Bus clock = 24M 总线时钟 //配置串口工作模式,8位无校验模式 uartch2->C1 = 0;

sbr = (uint_16)((BUS_CLK_KHZ*1000)/(baud_rate * 16)); temp = UART_BDH_REG(uartch2) & ~(UART_BDH_SBR(0x1F));

UART_BDH_REG(uartch2) = temp | UART_BDH_SBR(((sbr & 0x1F00) >> 8)); UART_BDL_REG(uartch2) = (uint_8)(sbr & UART_BDL_SBR_MASK);

//初始化控制寄存器、清标志位 uartch2->C1 = 0x00; uartch2->C3 = 0x00; uartch2->S1 = 0x1F;

uartch2->S2 = 0x00; //启动发送接收

uartch2->C2 |= (UART_C2_TE_MASK | UART_C2_RE_MASK);

//============================================================================

//函数名称:uart_send1

//参数说明:uartNo: 串口号:UART_0、UART_1、UART_2 // ch:要发送的字节

//函数返回:函数执行状态:0=正常;非0=异常。 //功能概要:串行发送1个字节

//============================================================================

uint_8 uart_send1(uint_8 uartNo, uint_8 ch) {

uint_32 t;

UARTLP_MemMapPtr uartch1=UART0_BASE_PTR; UART_MemMapPtr uartch2 = UART_ARR[uartNo-1];

for (t = 0; t < 0xFBBB; t++) {

//判断发送缓冲区是否为空

if(0==uartNo)

22


嵌入式课程设计报告(5).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:智能电池充电器的设计毕业论文 应用电子

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: