LM3S615的返回值读取

2019-07-16 09:28发布

昨天遇到一个问题,使用GPIOPinRead();函数在读取GPIO返回值的时候返回的是管脚值,我翻了技术手册但是上面没有说明什么函数是读取管脚返回值,唯一一个就是GPIOPinRead();书写过后发现只是返回值是管脚,而不是管脚得到的数值
while(1)
    {
    Dval0=GPIOPinRead(GPIO_PORTD_BASE,GPIO_PIN_0);
    Dval1=GPIOPinRead(GPIO_PORTD_BASE,GPIO_PIN_1);
    Dval3=GPIOPinRead(GPIO_PORTD_BASE,GPIO_PIN_3);
    Dval4=GPIOPinRead(GPIO_PORTD_BASE,GPIO_PIN_4);
    Dval5=GPIOPinRead(GPIO_PORTD_BASE,GPIO_PIN_5);              
  Dval6=GPIOPinRead(GPIO_PORTD_BASE,GPIO_PIN_6);
    Dval7=GPIOPinRead(GPIO_PORTD_BASE,GPIO_PIN_7);
    //Dval11=*(volatile unsigned long*)(GPIO_PORTD_BASE);
        
        if(!GPIOPinRead(GPIO_PORTD_BASE,GPIO_PIN_0))
    {     PWMGenDisable(PWM_BASE,PWM_GEN_1);
                PWMPulseWidthSet(PWM_BASE,PWM_OUT_2,50);   
                PWMPulseWidthSet(PWM_BASE,PWM_OUT_3,600);   
    }
    else if(!GPIOPinRead(GPIO_PORTD_BASE,GPIO_PIN_1))  
    {     
          PWMGenDisable(PWM_BASE,PWM_GEN_1);
                PWMPulseWidthSet(PWM_BASE,PWM_OUT_2,100);   
                PWMPulseWidthSet(PWM_BASE,PWM_OUT_3,500);   
         
    }

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
4条回答
z00
2019-07-16 13:08
GPIOPinRead(),其功能为读取某端口某管脚的状态,该函数也在gpio.c中,其定义为:
Long  GPIOPinRead(unsigned long ulPort, unsigned char ucPins)
{
    ASSERT(GPIOBaseValid(ulPort));
    return(HWREG(ulPort + (GPIO_O_DATA + (ucPins << 2))));  // Return the pin value(s).
}
其中HWREG(ulPort + (GPIO_O_DATA + (ucPins << 2)))这句很重要,体现了一种利用地址线屏蔽而实现可对任意位操作的机制,将地址总线的位[9:2]用作屏蔽位,在读操作过程中,如果与数据位相关联的地址位被设为1,那么读取该值,如果与数据位相关联的地址位被设为0,那么不管它的实际值是什么,都将该值读作0。

一周热门 更多>