打印
[MINI51]

请问 MINI54ZAN的P1串口,可以用不

[复制链接]
3348|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
人可水日月|  楼主 | 2013-6-9 15:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
沙发
缥缈九哥| | 2013-6-10 10:40 | 只看该作者
IO复用,你配置对了?

使用特权

评论回复
板凳
缥缈九哥| | 2013-6-10 10:48 | 只看该作者
IO复用,你配置对了?
/**   
* @brief       初始化GPIO为指定功能
*
* @param       function
*     @arg FUNC_GPIO_P0:      使能 GPIO Port0 函数
*     @arg FUNC_GPIO_P1:      使能 GPIO Port1 函数
*     @arg FUNC_GPIO_P2:      使能 GPIO Port2 函数
*     @arg FUNC_GPIO_P3:      使能 GPIO Port3 函数
*     @arg FUNC_GPIO_P4:      使能 GPIO Port4 函数
*     @arg FUNC_GPIO_P5:      使能 GPIO Port5 函数
*     @arg FUNC_UART_TX_P00:  使能 UART Port0 TX 函数
*     @arg FUNC_UART_RX_P01:  使能 UART Port0 RX 函数
*     @arg FUNC_UART_CTS_P00: 使能 UART Port0 CTS 函数
*     @arg FUNC_UART_RTS_P01: 使能 UART Port0 RTS 函数
*     @arg FUNC_UART_RX_P12:  使能 UART Port1 RX 函数
*     @arg FUNC_UART_TX_P13:  使能 UART Port1 TX 函数
*     @arg FUNC_SPI_SS_P04:   使能 SPI Port0 bit4 SS 函数
*     @arg FUNC_SPI_SS_P01:   使能 SPI Port0 bit1 SS 函数
*
* @retval      E_SUCCESS   成功
*/
int32_t DrvGPIO_SelectFunction(uint32_t function)
{
        uint32_t shift0;
        uint32_t mask0;
        uint32_t val0;
        uint32_t port0;
        uint32_t base, value;

        port0 = (function & 0xF000000) >> 24;

        if (port0 != 0xF)
        {
                base = (GCR_BASE + 0x30) + (port0 << 2);
                shift0 = (function & 0xF0000) >> 16;
                mask0 = (function & 0xF00) >> 8;
                val0 = (((function & 0xC) << 6) | (function & 0x3)) << shift0;

                if (val0)
                {
                        mask0 |= (mask0 << 8);
                        value = inpw(base);
                        value &= ~(mask0 << shift0);
                        outpw(base, value|val0);
                }
                else
                        outpw(base, 0);
        }

    return E_SUCCESS;
}

使用特权

评论回复
地板
缥缈九哥| | 2013-6-10 10:58 | 只看该作者
/**   
* @brief       初始化GPIO为指定功能
*
* @param       function
*     @arg FUNC_GPIO:      使能所有 GPIO
*     @arg FUNC_CLKO:      使能 CLKO 函数
*     @arg FUNC_I2C:       使能 I2C 函数
*     @arg FUNC_SPI:       使能 API 函数
*     @arg FUNC_ADC0:      使能 ADC0 函数
*     @arg FUNC_ADC1:      使能 ADC1 函数
*     @arg FUNC_ADC2:      使能 ADC2 函数
*     @arg FUNC_ADC3:      使能 ADC3 函数
*     @arg FUNC_ADC4:      使能 ADC4 函数
*     @arg FUNC_ADC5:      使能 ADC5 函数
*     @arg FUNC_ADC6:      使能 ADC6 函数
*     @arg FUNC_ADC7:      使能 ADC7 函数
*     @arg FUNC_EXTINT0:   使能外部中断0函数
*     @arg FUNC_EXTINT1:   使能外部中断1函数
*     @arg FUNC_TMR0:      使能定时器0函数
*     @arg FUNC_TMR1:      使能定时器1函数
*     @arg FUNC_UART:      使能 UART 函数
*     @arg FUNC_UART_FULL: 使能全 UART 函数
*     @arg FUNC_PWM0:      使能 PWM0 函数
*     @arg FUNC_PWM1:      使能 PWM1 函数
*     @arg FUNC_PWM2:      使能 PWM2 函数
*     @arg FUNC_PWM3:      使能 PWM3 函数
*     @arg FUNC_PWM4:      使能 PWM4 函数
*     @arg FUNC_PWM5:      使能 PWM5 函数
*     @arg FUNC_ICE:       使能 ICE 函数
*     @arg FUNC_ACMP0:     使能 ACMP0 函数
*     @arg FUNC_ACMP1:     使能 ACMP1 函数
*     @arg FUNC_T0EX:      使能定时器0 TEX 函数
*     @arg FUNC_T1EX:      使能定时器1 TEX 函数
*
* @retval      E_SUCCESS   成功
*/
int32_t DrvGPIO_InitFunction(uint32_t function)
{
        uint32_t shift0, shift1;
        uint32_t mask0, mask1;
        uint32_t val0, val1;
        uint32_t port0, port1;
        uint32_t base, value;

        if (function == FUNC_GPIO)
        {
                GCR->P0_MFP = 0;
                GCR->P1_MFP = 0;
                GCR->P2_MFP = 0;
                GCR->P3_MFP = 0;
                GCR->P4_MFP = 0;
                GCR->P5_MFP = 0;
        }

        port0 = (function & 0xF000000) >> 24;
        port1 = (function & 0xF0000000) >> 28;

        if (port0 != 0xF)
        {
                base = (GCR_BASE + 0x30) + (port0 << 2);
                shift0 = (function & 0xF0000) >> 16;
                mask0 = (function & 0xF00) >> 8;
                val0 = (((function & 0xC) << 6) | (function & 0x3)) << shift0;

                if (mask0 & 0x2)
                        val0 |= (val0 << 1);
                if (mask0 & 0x4)
                        val0 |= (val0 << 2);
                if (mask0 & 0x8)
                        val0 |= (val0 << 3);

                mask0 |= (mask0 << 8);
                value = inpw(base);
                value &= ~(mask0 << shift0);
                outpw(base, value|val0);
        }

        if (port1 != 0xF)
        {
                base = (GCR_BASE + 0x30) + (port1 << 2);
                shift1 = (function & 0xF00000) >> 20;
                mask1 = (function & 0xF000) >> 12;
                val1 = (((function & 0xC0) << 2) | ((function & 0x30) >> 4)) << shift1;

                if (mask1 & 0x2)
                        val1 |= (val1 << 1);
                if (mask1 & 0x4)
                        val1 |= (val1 << 2);
                if (mask1 & 0x8)
                        val1 |= (val1 << 3);

                mask1 |= (mask1 << 8);
                value = inpw(base);
                value &= ~(mask1 << shift1);
                outpw(base, value|val1);
        }

    return E_SUCCESS;
}

使用特权

评论回复
5
09kk小熊| | 2014-10-28 11:56 | 只看该作者
官方开发板上45、46脚是对应RXD、TXD,而37、38也存在管脚复用,也可以对应RXD、TXD,我想问一下这两个uart管脚有什么不一样,应用场景有什么不一样的吗?

使用特权

评论回复
6
lyf_d| | 2015-1-30 22:26 | 只看该作者
为什么我用官方的初始化,串口不能通讯啊?
    SYS_Init();

    /* Init UART to 115200-8n1 for print message */
    UART_Open(UART, 115200);
   

使用特权

评论回复
7
lyf_d| | 2015-1-30 22:27 | 只看该作者
lyf_d 发表于 2015-1-30 22:26
为什么我用官方的初始化,串口不能通讯啊?
    SYS_Init();

如下是函数
void SYS_Init(void)
{
/*---------------------------------------------------------------------------------------------------------*/
/* Init System Clock                                                                                       */
/*---------------------------------------------------------------------------------------------------------*/

    /* Unlock protected registers */
    SYS_UnlockReg();

    /* Enable external 12MHz XTAL (UART), internal 22.1184MHz */
    CLK->PWRCON = CLK_PWRCON_XTL12M | CLK_PWRCON_IRC22M_EN_Msk;

    /* Waiting for clock ready */
    CLK_WaitClockReady(CLK_CLKSTATUS_XTL_STB_Msk | CLK_CLKSTATUS_IRC22M_STB_Msk);

    /* Enable UART and ADC clock */
    CLK->APBCLK = CLK_APBCLK_UART_EN_Msk | CLK_APBCLK_ADC_EN_Msk;

    /* Select UART clock source from external crystal*/
    CLK->CLKSEL1 = (CLK->CLKSEL1 & ~CLK_CLKSEL1_UART_S_Msk) | CLK_CLKSEL1_UART_S_XTAL;
   
    /* ADC clock source is 22.1184MHz, set divider to (3 + 1), ADC clock is 22.1184/4 MHz */
    CLK->CLKDIV |= (3 << CLK_CLKDIV_ADC_N_Pos);

    /* Update System Core Clock */
    /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock and CycylesPerUs automatically. */
    SystemCoreClockUpdate();


/*---------------------------------------------------------------------------------------------------------*/
/* Init I/O Multi-function                                                                                 */
/*---------------------------------------------------------------------------------------------------------*/
    /* Set P1 multi-function pins for UART RXD, TXD */
    SYS->P0_MFP = SYS_MFP_P00_TXD | SYS_MFP_P01_RXD;
   
    /* Set P5.3 to ADC channel 0 input pin */
    SYS->P5_MFP = SYS_MFP_P53_AIN0;
    /* Analog pin OFFD to prevent leakage */
    P5->OFFD |= (1 << 3) << GPIO_OFFD_OFFD_Pos;
   
    /* Lock protected registers */
    SYS_LockReg();
}

使用特权

评论回复
8
lvyunhua| | 2015-2-7 13:18 | 只看该作者
楼上的硬件有没有问题呢?

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

8

帖子

1

粉丝