我有一個模擬器件的DAC8562。這裏是一個數據表:用微控制器有效控制DAC
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
@Olaf你的評論是無用的,因爲我已經解決了佈局是我的控制。 –
不,你沒有。至少仍然踢硬件設計師會讓人滿意。幾乎沒有一種**高效的**方法可以使代碼更好,甚至更多,因爲信號不僅僅是混合在一個端口上,而是多個端口上。他們做了什麼,擲骰子的引腳?即使查找表幾乎不可用 - 即使您可以備用8KiB閃存。 – Olaf