【发布时间】:2016-02-17 00:27:40
【问题描述】:
我有一个模拟设备的 DAC8562。这是一个数据表:
http://www.analog.com/media/en/technical-documentation/data-sheets/DAC8562.pdf
它是一个并行的 12 位 DAC。我有一个用 C 语言编写的函数,它控制 GPIO 引脚以将输入值锁存到 DAC。我的问题是我的功能相当慢。代码如下:
void setOut(uint16_t data) {
//Set DATA
if (data & 0x01) {
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P4, GPIO_PIN2);
} else {
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P4, GPIO_PIN2);
}
if (data & 0x02) {
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P4, GPIO_PIN0);
} else {
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P4, GPIO_PIN0);
}
if (data & 0x04) {
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P6, GPIO_PIN1);
} else {
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P6, GPIO_PIN1);
}
if (data & 0x08) {
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN7);
} else {
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN7);
}
if (data & 0x10) {
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN6);
} else {
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN6);
}
if (data & 0x20) {
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN4);
} else {
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN4);
}
if (data & 0x40) {
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P5, GPIO_PIN6);
} else {
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN6);
}
if (data & 0x80) {
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P6, GPIO_PIN6);
} else {
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P6, GPIO_PIN6);
}
if (data & 0x100) {
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P6, GPIO_PIN7);
} else {
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P6, GPIO_PIN7);
}
if (data & 0x200) {
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P2, GPIO_PIN3);
} else {
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P2, GPIO_PIN3);
}
if (data & 0x400) {
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P5, GPIO_PIN1);
} else {
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P5, GPIO_PIN1);
}
if (data & 0x800) {
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P3, GPIO_PIN5);
} else {
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P3, GPIO_PIN5);
}
// Set CE Low
MAP_GPIO_setOutputLowOnPin(GPIO_PORT_P4, GPIO_PIN4);
// Set CE High
MAP_GPIO_setOutputHighOnPin(GPIO_PORT_P4, GPIO_PIN4);}
问题是电路板的布局需要我使用的特定端口/引脚分配。 到目前为止,我正在单独检查每个位并匹配该位表示为高或低的引脚输出。有没有更有效的方法来做到这一点?
附加信息: 我正在使用 MSP432P401R 作为微控制器。 我正在使用 TI 的驱动程序库来控制 GPIO。
【问题讨论】:
-
这就是为什么人们也应该在设计硬件时考虑一下。将接线更改为更智能的接线。
-
@Olaf 您的评论毫无用处,因为我已经指出布局超出了我的控制范围。
-
不,你没有。仍然但是踢硬件设计师至少会带来一些满足感。几乎没有一种有效的方法可以使代码变得更好,甚至更多,因为信号不仅在单个端口上混合,而且在多个端口上混合。他们做了什么,为引脚排列掷骰子?即使是查找表也几乎无法使用 - 即使您可以节省 8KiB 闪存。
-
@Olaf 来自原始帖子“问题是电路板的布局需要我使用的特定端口/引脚分配。”布局使引脚分配非常适合启动板上的分线板。为什么 TI 决定按照他们的方式安排启动板引脚我永远不会知道。谢谢你们的cmets,我认为没有什么比我有更好的了
-
你期待什么?您可以拉直引脚排列,也可以忍受蹩脚的开销软件。这就是我不喜欢评估板的原因。
标签: c embedded bit-manipulation microcontroller bit