[求助] LM3S9B96 比较器没输出,求助!

叉烧农民头   2012-8-29 17:25 楼主
用DK-LM3S9B96开发板做了小程序,但输出管脚没输出,请教各位是何原因

#include "hw_memmap.h"
#include "hw_types.h"
#include "inc/hw_ints.h"
#include "gpio.h"
#include "sysctl.h"
#include "systick.h"
#include "comp.h"
#include "driverlib/interrupt.h"
#include "drivers/set_pinout.h"
#include "inc/lm3s9b96.h"

#ifdef DEBUG
void
__error__(char *pcFilename, unsigned long ulLine)
{
}
#endif

void comparator_init ()
{
  //使能GPIO PB口
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);                 
  //使能模拟比较器0
  SysCtlPeripheralEnable(SYSCTL_PERIPH_COMP0);            
  //  设置 PB4 为C0-
  GPIOPinTypeComparator(GPIO_PORTB_BASE, GPIO_PIN_4 );

  // 配置模拟比较器0
  ComparatorConfigure(COMP_BASE, 0, (COMP_TRIG_NONE | COMP_ASRCP_REF | COMP_INT_HIGH |
                                     COMP_OUTPUT_NORMAL));                  
  // 配置内部参考电压为 1.65V
  ComparatorRefSet(COMP_BASE, COMP_REF_1_65V);

  // 设置为硬件外部功能
  GPIODirModeSet(GPIO_PORTB_BASE,GPIO_PIN_5,GPIO_DIR_MODE_HW);
  // 设置为4mA驱动和推挽使能
  GPIOPadConfigSet(GPIO_PORTB_BASE,GPIO_PIN_5,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_ANALOG);

  //设置PB5的复用功能为模拟器0的输出
  GPIOPinConfigure(GPIO_PCTL_PB5_C0O);
  //使能比较器中断
  ComparatorIntEnable(COMP_BASE, 0);
  //使能比较器0中断
  IntEnable(INT_COMP0);


}

void led_init()
{
  //使能GPIO PF口
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

  // PF3为推挽输出模式
  GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_3);
  //LED亮 自检作用 开机亮一下
  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3, GPIO_PIN_3);
  //延时
  SysCtlDelay(SysCtlClockGet()/6);
  //LED灭
  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3, 0);
                  
}

void Analog_Comparator_0_ISR(void)
{
  unsigned long ulStatus;
  //读取比较器状态
  ulStatus = ComparatorIntStatus(COMP_BASE,0, true);
  //清除比较器中断标志
  ComparatorIntClear(COMP_BASE, 0);

  if (ulStatus)
     {
        if (ComparatorValueGet(COMP_BASE, 0))
           {
             GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3, GPIO_PIN_3); // 点亮LED
           }
        else
           {
             GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3, 0); // 熄灭LED
           }
     }
}

int main(void)
{
    SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
                       SYSCTL_XTAL_16MHZ);

        PinoutSet();
        //比较器初始化
        comparator_init();

        //LED管脚初始化
        led_init();

    IntMasterEnable();
    while (1)
          {

          }
}

  程序已经设置好比较器0,LED灯输出管脚PF3,把PB5设置成比较器的输出口,输出PB5管脚复用也做了(不知是否正确),PF3管脚的LED灯也能通过中断程序控制亮和灭,但就是PB5没有高低电平的变化输出,请各位指教。

回复评论 (3)

除了物理管脚复用以外,还有功能引脚复用,还要指定用哪个引脚做比较器的功能引脚,需要单独配置
点赞  2012-8-29 18:46
引用: 原帖由 zca123 于 2012-8-29 18:46 发表
除了物理管脚复用以外,还有功能引脚复用,还要指定用哪个引脚做比较器的功能引脚,需要单独配置
请问如何配置,用Stellaris 官方函数库中的哪个函数配置?我现在要用PB4 做 C0-  PB6 做C0+  用PB5做C0o
点赞  2012-8-30 20:55
问题已解决,原来是函数调用时参数错了,重贴一下程序,能正常运行,供大家参考。

有关Stellaris的管脚复用问题可参考TI官方文档:Configuring Stellaris® Microcontrollers with Pin Multiplexing

#include "hw_memmap.h"
#include "hw_types.h"
#include "inc/hw_ints.h"
#include "driverlib/gpio.h"
#include "driverlib/sysctl.h"
#include "driverlib/systick.h"
#include "driverlib/comp.h"
#include "driverlib/interrupt.h"
#include "drivers/set_pinout.h"
//#include "inc/lm3s9b96.h"

//*****************************************************************************
//
// The error routine that is called if the driver library encounters an error.
//
//*****************************************************************************
#ifdef DEBUG
void
__error__(char *pcFilename, unsigned long ulLine)
{
}
#endif


void comparator_init ()
{
  //使能GPIO PB口
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOB);                 
  //使能模拟比较器0
  SysCtlPeripheralEnable(SYSCTL_PERIPH_COMP0);            
  //设置PB5的复用功能为模拟器0的输出
  GPIOPinConfigure(GPIO_PB5_C0O);

  //  设置 PB4 为C0-
  GPIOPinTypeComparator(GPIO_PORTB_BASE, GPIO_PIN_4 | GPIO_PIN_5 | GPIO_PIN_6 );

//  GPIOPinTypeComparator(GPIO_PORTB_BASE, GPIO_PIN_4 );
  // 配置模拟比较器0
  ComparatorConfigure(COMP_BASE, 0, (COMP_TRIG_NONE | COMP_ASRCP_REF | COMP_INT_HIGH |
                                     COMP_OUTPUT_NORMAL));                  
  // 配置内部参考电压为 1.65V
  ComparatorRefSet(COMP_BASE, COMP_REF_1_65V);

  // 设置为硬件外部功能
  GPIODirModeSet(GPIO_PORTB_BASE,GPIO_PIN_5,GPIO_DIR_MODE_HW);
  // 设置为4mA驱动和推挽使能
  GPIOPadConfigSet(GPIO_PORTB_BASE,GPIO_PIN_5,GPIO_STRENGTH_4MA,GPIO_PIN_TYPE_STD);
         

  //使能比较器中断
  ComparatorIntEnable(COMP_BASE, 0);
  //使能比较器0中断
  IntEnable(INT_COMP0);


}

void led_init()
{
  //使能GPIO PF口
  SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOF);

//  GPIOPadConfigSet(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_STRENGTH_4MA, GPIO_PIN_TYPE_STD);     //设置管脚类型

//  GPIODirModeSet(GPIO_PORTF_BASE, GPIO_PIN_3, GPIO_DIR_MODE_OUT);//设置输入输出

  // PF3为推挽输出模式
  GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE,GPIO_PIN_3);
  //LED亮
  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3, GPIO_PIN_3);
  //延时
  SysCtlDelay(SysCtlClockGet()/6);
  //LED灭
  GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3, 0);
                  
}

void Analog_Comparator_0_ISR(void)
{
  unsigned long ulStatus;
  //读取比较器状态
  ulStatus = ComparatorIntStatus(COMP_BASE,0, true);
  //清除比较器中断标志
  ComparatorIntClear(COMP_BASE, 0);

  if (ulStatus)
     {
        if (ComparatorValueGet(COMP_BASE, 0))
           {
             GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3, GPIO_PIN_3); // 点亮LED
           }
        else
           {
             GPIOPinWrite(GPIO_PORTF_BASE,GPIO_PIN_3, 0); // 熄灭LED
           }
     }
}

int main(void)
{
     //
    // Set the system clock to run at 16MHz from the PLL
    //
    SysCtlClockSet(SYSCTL_SYSDIV_10 | SYSCTL_USE_PLL | SYSCTL_OSC_MAIN |
                       SYSCTL_XTAL_16MHZ);
    //
    // Set the device pinout appropriately for this board.
    // 必需
    PinoutSet();
    //比较器初始化
    comparator_init();

    //LED管脚初始化
    led_init();
    //
    // 处理器总中断必须最后开
    //
    IntMasterEnable();
    while (1)
      {

      }
}


点赞  2012-8-30 22:21
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复