智能车制作

标题: 野火K60 库的一些疑问 [打印本页]

作者: 菜鸟威    时间: 2013-6-8 12:00
标题: 野火K60 库的一些疑问
typedef enum PORTx
{  PORTA,  PORTB,  PORTC,  PORTD,  PORTE}PORTx;
volatile struct GPIO_MemMap *GPIOx[5]={PTA_BASE_PTR,PTB_BASE_PTR,PTC_BASE_PTR,PTD_BASE_PTR,PTE_BASE_PTR}; //定义五个指针数组保存 GPIOx 的地址

volatile struct PORT_MemMap *PORTX[5]={PORTA_BASE_PTR,PORTB_BASE_PTR,PORTC_BASE_PTR,PORTD_BASE_PTR,PORTE_BASE_PTR};
//这个数组存放了端口的基地址,其中PORTB_BASE_PTR等在头文件里映射到物理地址

void gpio_init (PORTx portx, u8 n,GPIO_CFG cfg,u8 data)
{
    ASSERT( (n < 32u)  && (data < 2u) );          //使用断言检查输入、电平 是否为1bit

    //选择功能脚 PORTx_PCRx ,每个端口都有个寄存器 PORTx_PCRx
    PORT_PCR_REG(PORTX[portx],n)=(0|PORT_PCR_MUX(1)|cfg); //这一句不懂,portx的值 是PORTA到PORTE,这几个只是定义在上面的结构体里,没有跟实际的地址联系起来(难道在其他地方定义了??)。按照值传递,PORTX[portx]为PORTX[PORTA],怎么跟volatile struct PORT_MemMap *PORTX[5]={PORTA_BASE_PTR,PORTB_BASE_PTR,PORTC_BASE_PTR,PORTD_BASE_PTR,PORTE_BASE_PTR};对应起来,这是我的疑惑之处

    //端口方向控制输入还是输出
    if( ( (cfg&0x01) == GPI) || (cfg == GPI_UP) ||     (cfg == GPI_UP_PF)      )
      //   最低位为0则输入   ||   输入上拉模式  ||   输入上拉,带无源滤波器
    {
        GPIO_PDDR_REG(GPIOx[portx]) &= ~(1<<n);    //设置端口方向为输入
    }
    else
    {
        GPIO_PDDR_REG(GPIOx[portx]) |= (1<<n);      //设置端口方向为输出
        if(data == 1)//output
        {
            GPIO_SET(portx,n,1);                    //对端口输出控制,输出为1
        }
        else
        {
            GPIO_SET(portx,n,0);                    //对端口输出控制,输出为0
        }
    }
}


还望各位大神指导指导,小弟学术不精,还望海涵


作者: dapan945    时间: 2013-6-8 12:12
头文件定义了
作者: 菜鸟威    时间: 2013-6-8 12:15
dapan945 发表于 2013-6-8 12:12
头文件定义了

是MK60DN256ZVMD10.头文件吗??怎么我没找到定义了,能把你定义的部分截个图来看看吗??
作者: dapan945    时间: 2013-6-8 12:21
[attach]46683[/attach]

作者: 青龙00    时间: 2013-6-8 12:28

typedef enum PORTx
{  PORTA,  PORTB,  PORTC,  PORTD,  PORTE}PORTx;
你这个定义的是枚举型啊!不懂哪里的疑惑
作者: 菜鸟威    时间: 2013-6-8 12:31
菜鸟威 发表于 2013-6-8 12:15
是MK60DN256ZVMD10.头文件吗??怎么我没找到定义了,能把你定义的部分截个图来看看吗??

这里是定义了PORTA~PORTE,但他们的值是多少呢???他只是在枚举变量里定义了
作者: 菜鸟威    时间: 2013-6-8 12:35
青龙00 发表于 2013-6-8 12:28
typedef enum PORTx
{  PORTA,  PORTB,  PORTC,  PORTD,  PORTE}PORTx;
你这个定义的是枚举型啊!不懂哪 ...

枚举型的变量就是说这个PORTx的值只能取PORTA.~PORTE,但是PORTA的值具体是什么呢??

作者: 青龙00    时间: 2013-6-8 12:41
哦!这个啊。枚举元素是常量,每个枚举元素代表一个整数,C语言编译按定义时的顺序默认它们的值是0,1,2....
作者: 青龙00    时间: 2013-6-8 12:41
哦!这个啊。枚举元素是常量,每个枚举元素代表一个整数,C语言编译按定义时的顺序默认它们的值是0,1,2....
作者: 菜鸟威    时间: 2013-6-8 13:59
青龙00 发表于 2013-6-8 12:41
哦!这个啊。枚举元素是常量,每个枚举元素代表一个整数,C语言编译按定义时的顺序默认它们的值是0,1,2.. ...

谢谢啦,基础不好,还得多多指教





欢迎光临 智能车制作 (http://dns.znczz.com/) Powered by Discuz! X3.2