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,因此您只能打开和关闭它 - 不可能进行更优质的控制。