我有带蜂鸣器的微控制器的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;
我觉得很奇怪,因为IOSET值在设置为BUZZER_PIN后才会改变。那么,它能做什么呢?
还有一个问题:我可以用蜂鸣器做些什么吗?例如。改变量?当然,声音的持续时间可以通过setBuzzer(1)调整,而不是暂停(时间)和setBuzzer(0)。
答案 0 :(得分:1)
在某处你会找到一个包含IOSET IOCLR等的#define的包含文件。
通常,它们映射到GPIO寄存器地址,例如:
#define FIO0DIR(*(volatile unsigned long *)0x3FFFC000)
IOSET通常是一个可写地址,硬件能够将写入1的所有位设置为1,同时将剩余的GPIO位保留为先前的状态。这消除了对读/修改/写操作的需要,因此更加中断/线程友好。它通常有一个类似的'IOCLR'伙伴,它可以清除GPIO端口上在其参数中设置的位而不影响其他状态。
端口寄存器本身可能被称为“IOPIN”,或类似的东西。使用IOPIN直接修改一个或多个位需要读/修改/写:(
蜂鸣器似乎连接到一个GPIO引脚,因此您只能打开和关闭它 - 无法进行更精细的控制。