Beispiel #1
0
/*!
 *  @brief      PORT初始化
 *  @param      PTxn    端口
 *  @param      cfg     端口属性配置,如触发选项和上拉下拉选项
 *  @since      v5.0
 *  @note       与port_init_NoALT不同的是,此函数需要配置 MUX 复用功能,
                否则 MUX = ALT0
 *  Sample usage:       port_init (PTA8, IRQ_RISING | PF | ALT1 | PULLUP );    //初始化 PTA8 管脚,上升沿触发中断,带无源滤波器,复用功能为GPIO ,上拉电阻
 */
void  port_init(PTXn_e ptxn, uint32 cfg )
{
    SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK << PTX(ptxn));                           //开启PORTx端口

    PORT_ISFR_REG(PORTX_BASE(ptxn)) = (1<<PTn(ptxn));                           // 清空标志位

    PORT_PCR_REG(PORTX_BASE(ptxn), PTn(ptxn)) = cfg;                            // 复用功能 , 确定触发模式 ,开启上拉或下拉电阻
}
Beispiel #2
0
/*!
 *  @brief      PORT初始化
 *  @param      PTxn    端口
 *  @param      cfg     端口属性配置,如触发选项和上拉下拉选项
 *  @since      v5.0
 *  @note       与port_init不同的是,此函数不需要配置 MUX 复用功能(即使配置了也不生效),
                MUX 保留 为原先寄存器配置的值
 *  Sample usage:       port_init_NoALT (PTA8, IRQ_RISING | PF | PULLUP );    //初始化 PTA8 管脚,上升沿触发中断,带无源滤波器,保留原先复用功能,上拉电阻
 */
void  port_init_NoALT(PTXn_e ptxn, uint32 cfg)
{
    SIM_SCGC5 |= (SIM_SCGC5_PORTA_MASK << PTX(ptxn));                           //开启PORTx端口

    PORT_ISFR_REG(PORTX_BASE(ptxn)) = (1<<PTn(ptxn));                           // 清空标志位

    //清空cfg里的MUX,加载寄存器里的MUX
    cfg &= ~PORT_PCR_MUX_MASK;                      //清了MUX 字段(即不需要配置ALT,保持原来的ALT)
    cfg |=  (PORT_PCR_REG(PORTX_BASE(ptxn), PTn(ptxn)) & PORT_PCR_MUX_MASK);    //读取寄存器里配置的 MUX

    PORT_PCR_REG(PORTX_BASE(ptxn), PTn(ptxn)) = cfg;            // 复用功能 , 确定触发模式 ,开启上拉或下拉电阻
}
Beispiel #3
0
/*************************************************************************
*                             蓝宙电子科技有限公司
*
*  函数名称:gpio_Interrupt_init
*  功能说明:初始化gpio
*  参数说明:PTxn      端口号(PORTA,PORTD)
*            IO          引脚方向,0=输入,1=输出,输入输出状态定义____________(修改:这个函数中只有定义为输入模式有效,否则不改变相关状态)
*            mode        中断模式
*  函数返回:无
*  修改时间:2012-9-15   已测试
*  备    注:
*************************************************************************/
void gpio_Interrupt_init(PTxn ptxn, GPIO_CFG cfg, GPIO_INP mode)
{
  ASSERT( (PTn(ptxn) < 32u)  );           //使用断言检查输入、电平 是否为1bit
  
  //选择功能脚 PORTx_PCRx ,每个端口都有个寄存器 PORTx_PCRx 
  
  PORT_PCR_REG(PORTX_BASE(ptxn), PTn(ptxn)) = (0 | PORT_PCR_MUX(1) | cfg | PORT_PCR_IRQC(mode) );
  //选择功能脚 PORTx_PCRx ,每个端口都有中断模型
  
//  PORT_DFER_REG(PORTX_BASE(ptxn)) = PORT_DFER_DFE( 1<<PTn(ptxn));
  
  //端口方向控制输入还是输出
  if( ( (cfg & 0x01) == GPI) || (cfg == GPI_UP) ||     (cfg == GPI_UP_PF) 
     || (cfg == GPI_DOWN) ||     (cfg == GPI_DOWN_PF)     )
    //   最低位为0则输入   ||   输入上拉模式  ||   输入上拉,带无源滤波器
  {
    GPIO_PDDR_REG(GPIOX_BASE(ptxn)) &= ~(1 << PTn(ptxn));  //设置端口方向为输入
  }
  
  if(PTX(ptxn)==0)
    enable_irq(PortA_irq_no);
  else if(PTX(ptxn)==3)
    enable_irq(PortD_irq_no);
  
}
Beispiel #4
0
/*************************************************************************
*                             蓝宙电子工作室
*
*  函数名称:gpio_init
*  功能说明:初始化gpio
*  参数说明:port:端口号(gpio.h中宏定义,分别为PORTA~PORTE=0~4)
*            dir:引脚方向(0=输入,1=输出)
*            state:引脚初始状态(0=低电平,1=高电平)
*  函数返回:无
*  修改时间:2014-9-18   已测试
*  备    注:
*************************************************************************/
void gpio_init(PTxn ptxn, uint8_t dir, uint8_t state)
{	
  //根据带入参数pin,指定该引脚功能为GPIO功能(即令引脚控制寄存器的MUX=0b001)
  PORT_PCR_REG(PORTX_BASE(ptxn), PTn(ptxn))= PORT_PCR_MUX(1);
  
  //根据带入参数dir,决定引脚为输出还是输入
  if (1 == dir)   //希望为输出
  {
    GPIO_PDDR_REG(GPIOX_BASE(ptxn)) |= (1 << PTn(ptxn));    //设置端口方向为输出
    gpio_set(ptxn , state);   //调用gpio_set函数,设定引脚初始状态
  }
  else         //希望为输入
    GPIO_PDDR_REG(GPIOX_BASE(ptxn)) &= ~(1 << PTn(ptxn));  //设置端口方向为输入
}