查看: 2092|回复: 1

[已解决] KL36 UART0 UART1 問題(已解决)

[复制链接]

该用户从未签到

7

主题

27

帖子

0

中级会员

Rank: 3Rank: 3

积分
207
最后登录
2023-6-1
发表于 2014-4-23 14:30:13 | 显示全部楼层 |阅读模式
 目前在使用UART1 TX/RX都沒問題,可是使用UART0 TX便無法傳輸,不知道哪裡出了問題。
#include "derivative.h" /* include peripheral declarations */
#define UR0
int main(void)
{
        int i = 0;
        unsigned char buf[5],j = 0;
    SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK
                  | SIM_SCGC5_PORTB_MASK
                  | SIM_SCGC5_PORTC_MASK
                  | SIM_SCGC5_PORTD_MASK
                  | SIM_SCGC5_PORTE_MASK );       
    //===================UART INIT========================//
#ifdef UR0       
        // UART0_TX = PTE20 = ALT4 
        PORTE_PCR20 = PORT_PCR_MUX(0x04);
        // UART0_RX = PTE21 = ALT4 
        PORTE_PCR21 = PORT_PCR_MUX(0x04)|PORT_PCR_PE_MASK|PORT_PCR_PS_MASK;
        SIM_SOPT2 &= ~SIM_SOPT2_UART0SRC_MASK;
        SIM_SOPT2 |= SIM_SOPT2_UART0SRC(2); // select the OSCERCLK as UART0 clock source
    OSC0_CR |= OSC_CR_ERCLKEN_MASK | OSC_CR_EREFSTEN_MASK ;
    SIM_SCGC4 |= SIM_SCGC4_UART0_MASK;
    // Disable UART0 before changing registers
    UART0_C2 &= ~(UART0_C2_TE_MASK | UART0_C2_RE_MASK);
    // Save off the current value of the uartx_BDH except for the SBR field 
    UART0_BDH = 0;
    UART0_BDL = 0x44;
           // Turn on DMA request(Transmit) for UART1
                //UART1_C4 |= 0X80;                         
    // Enable receiver and transmitter 
    UART0_C2 |= (UART0_C2_TE_MASK | UART0_C2_RE_MASK );
#else
        // UART1_TX = PTE0 = ALT3 
        PORTE_PCR0 = PORT_PCR_MUX(0x03);
        // UART1_RX = PTE1 = ALT3 
        PORTE_PCR1 = PORT_PCR_MUX(0x03)|PORT_PCR_PE_MASK|PORT_PCR_PS_MASK;
        SIM_SOPT2 &= ~SIM_SOPT2_UART0SRC_MASK;
        SIM_SOPT2 |= SIM_SOPT2_UART0SRC(2); // select the OSCERCLK as UART0 clock source
    OSC0_CR |= OSC_CR_ERCLKEN_MASK | OSC_CR_EREFSTEN_MASK ;
    SIM_SCGC4 |= SIM_SCGC4_UART1_MASK;
    // Disable UART0 before changing registers
    UART1_C2 &= ~(UART0_C2_TE_MASK | UART0_C2_RE_MASK);
    // Save off the current value of the uartx_BDH except for the SBR field 
    UART1_BDH = 0;
    UART1_BDL = 0x44;
           // Turn on DMA request(Transmit) for UART1
                //UART1_C4 |= 0X80;                         
    // Enable receiver and transmitter 
    UART1_C2 |= (UART0_C2_TE_MASK | UART0_C2_RE_MASK );
#endif       
//////////////////////////////////////////////////////////////////////
        while(1)
        {
#ifdef UR0
                        while(UART0_S1 & 0X80)
                        {
                                UART0_D = 0XA5;
                        }
#else
                        while(UART1_S1 & 0X80)
                        {
                                UART1_D = 0XA5;
                        }
#endif                       
                        for(i = 0 ; i < 300000 ;i++);
        }
        return 0;
}
我知道答案 目前已有0人回答
回复

使用道具 举报

该用户从未签到

0

主题

32

帖子

0

注册会员

Rank: 2

积分
97
最后登录
2019-10-27
发表于 2014-4-23 18:10:48 | 显示全部楼层

回复:KL36 UART0 UART1 問題

您好,请先检查一下UART0的时钟源。因为UART0支持low power,所以有多个时钟源可以选择,而UART1只支持BUS Clock。请检查SIM模块SOPT2寄存器UART0SRC位的值(默认disable),并打开对应的时钟,然后再看UART0能否正常工作。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 注册/登录

本版积分规则

关闭

站长推荐上一条 /3 下一条

Archiver|手机版|小黑屋|恩智浦技术社区

GMT+8, 2025-7-19 08:55 , Processed in 0.103566 second(s), 22 queries , MemCache On.

Powered by Discuz! X3.4

Copyright © 2001-2024, Tencent Cloud.

快速回复 返回顶部 返回列表