mirror of
https://github.com/esp8266/Arduino.git
synced 2025-06-25 06:22:11 +03:00
Fixed analogWrite() when writing on both DACs. Thanks to smay4finger
for providing the patch. http://code.google.com/p/arduino/issues/detail?id=1092 http://arduino.cc/forum/index.php/topic,129765.msg980913.html
This commit is contained in:
@ -206,7 +206,7 @@ void analogWrite(uint32_t ulPin, uint32_t ulValue) {
|
|||||||
EAnalogChannel channel = g_APinDescription[ulPin].ulADCChannelNumber;
|
EAnalogChannel channel = g_APinDescription[ulPin].ulADCChannelNumber;
|
||||||
if (channel == DA0 || channel == DA1) {
|
if (channel == DA0 || channel == DA1) {
|
||||||
uint32_t chDACC = ((channel == DA0) ? 0 : 1);
|
uint32_t chDACC = ((channel == DA0) ? 0 : 1);
|
||||||
if ((dacc_get_channel_status(DACC_INTERFACE) & (1 << chDACC)) == 0) {
|
if (dacc_get_channel_status(DACC_INTERFACE) == 0) {
|
||||||
/* Enable clock for DACC_INTERFACE */
|
/* Enable clock for DACC_INTERFACE */
|
||||||
pmc_enable_periph_clk(DACC_INTERFACE_ID);
|
pmc_enable_periph_clk(DACC_INTERFACE_ID);
|
||||||
|
|
||||||
@ -228,20 +228,22 @@ void analogWrite(uint32_t ulPin, uint32_t ulValue) {
|
|||||||
*/
|
*/
|
||||||
dacc_set_timing(DACC_INTERFACE, 0x08, 0, 0x10);
|
dacc_set_timing(DACC_INTERFACE, 0x08, 0, 0x10);
|
||||||
|
|
||||||
/* Disable TAG and select output channel chDACC */
|
|
||||||
dacc_set_channel_selection(DACC_INTERFACE, chDACC);
|
|
||||||
|
|
||||||
/* Enable output channel chDACC */
|
|
||||||
dacc_enable_channel(DACC_INTERFACE, chDACC);
|
|
||||||
|
|
||||||
/* Set up analog current */
|
/* Set up analog current */
|
||||||
dacc_set_analog_control(DACC_INTERFACE, DACC_ACR_IBCTLCH0(0x02) |
|
dacc_set_analog_control(DACC_INTERFACE, DACC_ACR_IBCTLCH0(0x02) |
|
||||||
DACC_ACR_IBCTLCH1(0x02) |
|
DACC_ACR_IBCTLCH1(0x02) |
|
||||||
DACC_ACR_IBCTLDACCORE(0x01));
|
DACC_ACR_IBCTLDACCORE(0x01));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Disable TAG and select output channel chDACC */
|
||||||
|
dacc_set_channel_selection(DACC_INTERFACE, chDACC);
|
||||||
|
|
||||||
|
if ((dacc_get_channel_status(DACC_INTERFACE) & (1 << chDACC)) == 0) {
|
||||||
|
dacc_enable_channel(DACC_INTERFACE, chDACC);
|
||||||
|
}
|
||||||
|
|
||||||
// Write user value
|
// Write user value
|
||||||
ulValue = mapResolution(ulValue, _writeResolution, DACC_RESOLUTION);
|
ulValue = mapResolution(ulValue, _writeResolution, DACC_RESOLUTION);
|
||||||
|
while ((dacc_get_interrupt_status(DACC_INTERFACE) & DACC_ISR_TXRDY) == 0);
|
||||||
dacc_write_conversion_data(DACC_INTERFACE, ulValue);
|
dacc_write_conversion_data(DACC_INTERFACE, ulValue);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user