C-什么是iOSET,以及如何工作简单蜂鸣器(Buzzer_pin)



i具有带有蜂鸣器的微控制器的C代码。它有效,但我想知道它是如何工作的。在wh.h/.cpp中,我具有功能:

void setBuzzer(tBool on)
{
  if (TRUE == on)
    IOCLR = BUZZER_PIN;
  else
    IOSET = BUZZER_PIN;
}

可以启用和禁用蜂鸣器。我不知道它真正是什么,buzzer_pin,ioclr和ioset是什么?

Buzzer_pin仅在代码中再次出现:

void immediateIoInit(void)
{
  tU8 initCommand[] = {0x12, 0x97, 0x80, 0x00, 0x40, 0x00, 0x14, 0x00, 0x00};
  //                                                         04 = LCD_RST# low
  //                                                         10 = BT_RST# low
  //make all key signals as inputs
  IODIR &= ~(KEYPIN_CENTER | KEYPIN_UP | KEYPIN_DOWN | KEYPIN_LEFT | KEYPIN_RIGHT);
  IODIR |= BUZZER_PIN;
  IOSET  = BUZZER_PIN;
  IODIR |= BACKLIGHT_PIN;
  IOSET  = BACKLIGHT_PIN;

对我来说看起来很奇怪,因为将其设置为buzzer_pin之后,iOSet值就在变化。那么,这样做可以做什么?

另一个问题:我可以用蜂鸣器做更多的事情吗?例如。更改为数量?当然,可以使用setBuzzer(1)调整声音持续时间,而不是暂停(时间)和setBuzzer(0)。

在某个地方您会找到一个包含ioset ioclr #define的inclage文件。

通常,它们映射到GPIO寄存器地址,例如:

#define fio0dir( *(挥发无签名长 *)0x3fffc000)

iOSET通常是一个可写的地址,可以将硬件功能设置为1个写入1的所有位,同时将其余的GPIO位留在其先前的状态下。这消除了对阅读/修改/写入操作的需求,因此更加中断/线程友好。它通常具有类似的" IOCLR"合作伙伴,可以清除GPIO端口上的位置,而GPIO端口中设置了其参数而不会影响他人的状态。

端口寄存器本身是称为" iopin"的概率,或类似的东西。使用IOPIN直接修改一个或子集需要读/修改/写:(

看来蜂鸣器已连接到一个GPIO PIN,因此您只能打开和关闭它 - 不可能进行更优质的控制。

最新更新