Reworked DAC driver, missing DMAMUX RCC macros for G4.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@13092 27425a3e-05d8-49a3-a47f-9c15f0e5edd8
This commit is contained in:
parent
12297967f2
commit
b6ad15437b
|
@ -283,6 +283,7 @@ static void dac_lld_serve_tx_interrupt(DACDriver *dacp, uint32_t flags) {
|
|||
|
||||
if ((flags & (STM32_DMA_ISR_TEIF | STM32_DMA_ISR_DMEIF)) != 0) {
|
||||
/* DMA errors handling.*/
|
||||
dac_lld_stop_conversion(dacp);
|
||||
_dac_isr_error_code(dacp, DAC_ERR_DMAFAILURE);
|
||||
}
|
||||
else {
|
||||
|
@ -431,9 +432,15 @@ void dac_lld_start(DACDriver *dacp) {
|
|||
/* Enabling DAC in SW triggering mode initially, initializing data to
|
||||
zero.*/
|
||||
#if STM32_DAC_DUAL_MODE == FALSE
|
||||
dacp->params->dac->CR &= dacp->params->regmask;
|
||||
dacp->params->dac->CR |= (DAC_CR_EN1 | dacp->config->cr) << dacp->params->regshift;
|
||||
dac_lld_put_channel(dacp, channel, dacp->config->init);
|
||||
{
|
||||
uint32_t cr = dacp->params->dac->CR;
|
||||
|
||||
dacp->params->dac->CR = cr;
|
||||
cr &= dacp->params->regmask;
|
||||
cr |= (DAC_CR_EN1 | dacp->config->cr) << dacp->params->regshift;
|
||||
dacp->params->dac->CR &= dacp->params->regmask;
|
||||
dac_lld_put_channel(dacp, channel, dacp->config->init);
|
||||
}
|
||||
#else
|
||||
if ((dacp->config->datamode == DAC_DHRM_12BIT_RIGHT_DUAL) ||
|
||||
(dacp->config->datamode == DAC_DHRM_12BIT_LEFT_DUAL) ||
|
||||
|
@ -645,7 +652,7 @@ void dac_lld_start_conversion(DACDriver *dacp) {
|
|||
dmaStreamSetPeripheral(dacp->dma, &dacp->params->dac->DHR12R1 +
|
||||
dacp->params->dataoffset);
|
||||
dmamode = dacp->params->dmamode |
|
||||
STM32_DMA_CR_PSIZE_HWORD | STM32_DMA_CR_MSIZE_HWORD;
|
||||
STM32_DMA_CR_PSIZE_WORD | STM32_DMA_CR_MSIZE_HWORD;
|
||||
break;
|
||||
case DAC_DHRM_12BIT_LEFT:
|
||||
osalDbgAssert(dacp->grpp->num_channels == 1, "invalid number of channels");
|
||||
|
@ -653,7 +660,7 @@ void dac_lld_start_conversion(DACDriver *dacp) {
|
|||
dmaStreamSetPeripheral(dacp->dma, &dacp->params->dac->DHR12L1 +
|
||||
dacp->params->dataoffset);
|
||||
dmamode = dacp->params->dmamode |
|
||||
STM32_DMA_CR_PSIZE_HWORD | STM32_DMA_CR_MSIZE_HWORD;
|
||||
STM32_DMA_CR_PSIZE_WORD | STM32_DMA_CR_MSIZE_HWORD;
|
||||
break;
|
||||
case DAC_DHRM_8BIT_RIGHT:
|
||||
osalDbgAssert(dacp->grpp->num_channels == 1, "invalid number of channels");
|
||||
|
@ -661,7 +668,7 @@ void dac_lld_start_conversion(DACDriver *dacp) {
|
|||
dmaStreamSetPeripheral(dacp->dma, &dacp->params->dac->DHR8R1 +
|
||||
dacp->params->dataoffset);
|
||||
dmamode = dacp->params->dmamode |
|
||||
STM32_DMA_CR_PSIZE_BYTE | STM32_DMA_CR_MSIZE_BYTE;
|
||||
STM32_DMA_CR_PSIZE_WORD | STM32_DMA_CR_MSIZE_BYTE;
|
||||
|
||||
/* In this mode the size of the buffer is halved because two samples
|
||||
packed in a single dacsample_t element.*/
|
||||
|
@ -689,7 +696,7 @@ void dac_lld_start_conversion(DACDriver *dacp) {
|
|||
|
||||
dmaStreamSetPeripheral(dacp->dma, &dacp->params->dac->DHR8RD);
|
||||
dmamode = dacp->params->dmamode |
|
||||
STM32_DMA_CR_PSIZE_HWORD | STM32_DMA_CR_MSIZE_HWORD;
|
||||
STM32_DMA_CR_PSIZE_WORD | STM32_DMA_CR_MSIZE_HWORD;
|
||||
n /= 2;
|
||||
break;
|
||||
#endif
|
||||
|
@ -706,16 +713,17 @@ void dac_lld_start_conversion(DACDriver *dacp) {
|
|||
dmaStreamEnable(dacp->dma);
|
||||
|
||||
/* DAC configuration.*/
|
||||
cr = dacp->params->dac->CR;
|
||||
|
||||
#if STM32_DAC_DUAL_MODE == FALSE
|
||||
cr = DAC_CR_DMAEN1 | (dacp->grpp->trigger << DAC_CR_TSEL1_Pos) | DAC_CR_TEN1 | DAC_CR_EN1 | dacp->config->cr;
|
||||
dacp->params->dac->CR &= dacp->params->regmask;
|
||||
dacp->params->dac->CR |= cr << dacp->params->regshift;
|
||||
cr &= dacp->params->regmask;
|
||||
cr |= (DAC_CR_DMAEN1 | (dacp->grpp->trigger << DAC_CR_TSEL1_Pos) | DAC_CR_TEN1 | DAC_CR_EN1 | dacp->config->cr) << dacp->params->regshift;
|
||||
#else
|
||||
dacp->params->dac->CR = 0;
|
||||
cr = DAC_CR_DMAEN1 | (dacp->grpp->trigger << DAC_CR_TSEL1_Pos) | DAC_CR_TEN1 | DAC_CR_EN1 | dacp->config->cr
|
||||
| (dacp->grpp->trigger << DAC_CR_TSEL2_Pos) | DAC_CR_TEN2 | DAC_CR_EN2 | (dacp->config->cr << 16);
|
||||
dacp->params->dac->CR = cr;
|
||||
#endif
|
||||
|
||||
dacp->params->dac->CR = cr;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -729,26 +737,31 @@ void dac_lld_start_conversion(DACDriver *dacp) {
|
|||
* @iclass
|
||||
*/
|
||||
void dac_lld_stop_conversion(DACDriver *dacp) {
|
||||
uint32_t cr;
|
||||
|
||||
/* DMA channel disabled and released.*/
|
||||
dmaStreamDisable(dacp->dma);
|
||||
dmaStreamFreeI(dacp->dma);
|
||||
dacp->dma = NULL;
|
||||
|
||||
cr = dacp->params->dac->CR;
|
||||
|
||||
#if STM32_DAC_DUAL_MODE == FALSE
|
||||
dacp->params->dac->CR &= dacp->params->regmask;
|
||||
dacp->params->dac->CR |= (DAC_CR_EN1 | dacp->config->cr) << dacp->params->regshift;
|
||||
cr &= dacp->params->regmask;
|
||||
cr |= (DAC_CR_EN1 | dacp->config->cr) << dacp->params->regshift;
|
||||
#else
|
||||
if ((dacp->config->datamode == DAC_DHRM_12BIT_RIGHT_DUAL) ||
|
||||
(dacp->config->datamode == DAC_DHRM_12BIT_LEFT_DUAL) ||
|
||||
(dacp->config->datamode == DAC_DHRM_8BIT_RIGHT_DUAL)) {
|
||||
dacp->params->dac->CR = DAC_CR_EN2 | (dacp->config->cr << 16) |
|
||||
DAC_CR_EN1 | dacp->config->cr;
|
||||
cr = DAC_CR_EN2 | (dacp->config->cr << 16) |
|
||||
DAC_CR_EN1 | dacp->config->cr;
|
||||
}
|
||||
else {
|
||||
dacp->params->dac->CR = DAC_CR_EN1 | dacp->config->cr;
|
||||
cr = DAC_CR_EN1 | dacp->config->cr;
|
||||
}
|
||||
#endif
|
||||
|
||||
dacp->params->dac->CR = cr;
|
||||
}
|
||||
|
||||
#endif /* HAL_USE_DAC */
|
||||
|
|
|
@ -508,6 +508,34 @@
|
|||
#define rccResetDMA2() rccResetAHB1(RCC_AHB1RSTR_DMA2RST)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name DMAMUX peripheral specific RCC operations
|
||||
* @{
|
||||
*/
|
||||
/**
|
||||
* @brief Enables the DMAMUX peripheral clock.
|
||||
*
|
||||
* @param[in] lp low power enable flag
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define rccEnableDMAMUX(lp) rccEnableAHB1(RCC_AHB1ENR_DMAMUX1EN, lp)
|
||||
|
||||
/**
|
||||
* @brief Disables the DMAMUX peripheral clock.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define rccDisableDMAMUX() rccDisableAHB1(RCC_AHB1ENR_DMAMUX1EN)
|
||||
|
||||
/**
|
||||
* @brief Resets the DMAMUX peripheral.
|
||||
*
|
||||
* @api
|
||||
*/
|
||||
#define rccResetDMAMUX() rccResetAHB1(RCC_AHB1RSTR_DMAMUX1RST)
|
||||
/** @} */
|
||||
|
||||
/**
|
||||
* @name PWR interface specific RCC operations
|
||||
* @{
|
||||
|
|
|
@ -33,9 +33,9 @@
|
|||
<intAttribute key="org.eclipse.cdt.launch.ATTR_BUILD_BEFORE_LAUNCH_ATTR" value="2"/>
|
||||
<stringAttribute key="org.eclipse.cdt.launch.COREFILE_PATH" value=""/>
|
||||
<stringAttribute key="org.eclipse.cdt.launch.DEBUGGER_REGISTER_GROUPS" value=""/>
|
||||
<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?><contentList><content id="rand-main-(format)" val="4"/><content id="rp-mfs_flash_read-(cast_to_array)" val="0:511"/><content id="rp[507]-rp-mfs_flash_read-(format)" val="0"/><content id="rp[506]-rp-mfs_flash_read-(format)" val="0"/><content id="mfs_buffer[507]-null-mfs_test_001_005_execute-(format)" val="0"/><content id="mfs_buffer[447]-null-mfs_test_001_005_execute-(format)" val="0"/><content id="xPSR-(format)" val="4"/><content id="rand[0]-rand-main-(format)" val="4"/><content id="rand[1]-rand-main-(format)" val="4"/><content id="rand[2]-rand-main-(format)" val="4"/><content id="rand[3]-rand-main-(format)" val="4"/><content id="rand[4]-rand-main-(format)" val="4"/><content id="rand[5]-rand-main-(format)" val="4"/><content id="rand[6]-rand-main-(format)" val="4"/><content id="rand[7]-rand-main-(format)" val="4"/><content id="rand[8]-rand-main-(format)" val="4"/><content id="rand[9]-rand-main-(format)" val="4"/><content id="rand[10]-rand-main-(format)" val="4"/><content id="rand[11]-rand-main-(format)" val="4"/><content id="rand[12]-rand-main-(format)" val="4"/><content id="rand[13]-rand-main-(format)" val="4"/><content id="rand[14]-rand-main-(format)" val="4"/><content id="rand[15]-rand-main-(format)" val="4"/><content id="rand[16]-rand-main-(format)" val="4"/><content id="rand[17]-rand-main-(format)" val="4"/><content id="rand[18]-rand-main-(format)" val="4"/><content id="rand[19]-rand-main-(format)" val="4"/><content id="rand[20]-rand-main-(format)" val="4"/><content id="rand[21]-rand-main-(format)" val="4"/><content id="rand[22]-rand-main-(format)" val="4"/><content id="rand[23]-rand-main-(format)" val="4"/><content id="rand[24]-rand-main-(format)" val="4"/><content id="rand[25]-rand-main-(format)" val="4"/><content id="rand[26]-rand-main-(format)" val="4"/><content id="rand[27]-rand-main-(format)" val="4"/><content id="rand[28]-rand-main-(format)" val="4"/><content id="rand[29]-rand-main-(format)" val="4"/><content id="rand[30]-rand-main-(format)" val="4"/><content id="rand[31]-rand-main-(format)" val="4"/></contentList>"/>
|
||||
<stringAttribute key="org.eclipse.cdt.launch.FORMAT" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?><contentList><content id="CPAR-channel-dma-null-_idle_thread-(format)" val="4"/><content id="CMAR-channel-dma-null-main-(format)" val="4"/><content id="CPAR-channel-dma-null-main-(format)" val="4"/><content id="CNDTR-channel-dma-null-main-(format)" val="4"/><content id="CCR-channel-dma-null-main-(format)" val="4"/><content id="channel-dma-null-main-(format)" val="4"/><content id="CPAR-channel-dma-null-error_cb1-(format)" val="4"/><content id="CMAR-channel-dma-dacp-dac_lld_serve_tx_interrupt-(format)" val="4"/><content id="CPAR-channel-dma-dacp-dac_lld_serve_tx_interrupt-(format)" val="4"/><content id="CCR-channel-dma-dacp-dac_lld_serve_tx_interrupt-(format)" val="4"/><content id="CR-dac-params-null-main-(format)" val="4"/><content id="CMAR-channel-dma-dacp-dac_lld_start_conversion-(format)" val="4"/><content id="CPAR-channel-dma-dacp-dac_lld_start_conversion-(format)" val="4"/><content id="CCR-channel-dma-dacp-dac_lld_start_conversion-(format)" val="4"/><content id="rand-main-(format)" val="4"/><content id="rp-mfs_flash_read-(cast_to_array)" val="0:511"/><content id="rp[507]-rp-mfs_flash_read-(format)" val="0"/><content id="rp[506]-rp-mfs_flash_read-(format)" val="0"/><content id="mfs_buffer[507]-null-mfs_test_001_005_execute-(format)" val="0"/><content id="mfs_buffer[447]-null-mfs_test_001_005_execute-(format)" val="0"/><content id="xPSR-(format)" val="4"/><content id="rand[0]-rand-main-(format)" val="4"/><content id="rand[1]-rand-main-(format)" val="4"/><content id="rand[2]-rand-main-(format)" val="4"/><content id="rand[3]-rand-main-(format)" val="4"/><content id="rand[4]-rand-main-(format)" val="4"/><content id="rand[5]-rand-main-(format)" val="4"/><content id="rand[6]-rand-main-(format)" val="4"/><content id="rand[7]-rand-main-(format)" val="4"/><content id="rand[8]-rand-main-(format)" val="4"/><content id="rand[9]-rand-main-(format)" val="4"/><content id="rand[10]-rand-main-(format)" val="4"/><content id="rand[11]-rand-main-(format)" val="4"/><content id="rand[12]-rand-main-(format)" val="4"/><content id="rand[13]-rand-main-(format)" val="4"/><content id="rand[14]-rand-main-(format)" val="4"/><content id="rand[15]-rand-main-(format)" val="4"/><content id="rand[16]-rand-main-(format)" val="4"/><content id="rand[17]-rand-main-(format)" val="4"/><content id="rand[18]-rand-main-(format)" val="4"/><content id="rand[19]-rand-main-(format)" val="4"/><content id="rand[20]-rand-main-(format)" val="4"/><content id="rand[21]-rand-main-(format)" val="4"/><content id="rand[22]-rand-main-(format)" val="4"/><content id="rand[23]-rand-main-(format)" val="4"/><content id="rand[24]-rand-main-(format)" val="4"/><content id="rand[25]-rand-main-(format)" val="4"/><content id="rand[26]-rand-main-(format)" val="4"/><content id="rand[27]-rand-main-(format)" val="4"/><content id="rand[28]-rand-main-(format)" val="4"/><content id="rand[29]-rand-main-(format)" val="4"/><content id="rand[30]-rand-main-(format)" val="4"/><content id="rand[31]-rand-main-(format)" val="4"/><content id="CCR-channel-dma-null-dac_lld_serve_tx_interrupt-(format)" val="4"/><content id="CPAR-channel-dma-null-dac_lld_serve_tx_interrupt-(format)" val="4"/><content id="CMAR-channel-dma-null-dac_lld_serve_tx_interrupt-(format)" val="4"/></contentList>"/>
|
||||
<stringAttribute key="org.eclipse.cdt.launch.GLOBAL_VARIABLES" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <globalVariableList/> "/>
|
||||
<stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <memoryBlockExpressionList> <memoryBlockExpressionItem> <expression text="0x20000c34"/> </memoryBlockExpressionItem> </memoryBlockExpressionList> "/>
|
||||
<stringAttribute key="org.eclipse.cdt.launch.MEMORY_BLOCKS" value="<?xml version="1.0" encoding="UTF-8" standalone="no"?> <memoryBlockExpressionList/> "/>
|
||||
<stringAttribute key="org.eclipse.cdt.launch.PROGRAM_NAME" value="${selected_resource_loc}"/>
|
||||
<stringAttribute key="org.eclipse.cdt.launch.PROJECT_ATTR" value="STM32-DAC"/>
|
||||
<booleanAttribute key="org.eclipse.cdt.launch.PROJECT_BUILD_CONFIG_AUTO_ATTR" value="false"/>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
# Compiler options here.
|
||||
ifeq ($(USE_OPT),)
|
||||
USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
|
||||
USE_OPT = -O0 -ggdb -fomit-frame-pointer -falign-functions=16
|
||||
endif
|
||||
|
||||
# C specific options here (added to USE_OPT).
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
|
||||
# Compiler options here.
|
||||
ifeq ($(USE_OPT),)
|
||||
USE_OPT = -O2 -ggdb -fomit-frame-pointer -falign-functions=16
|
||||
USE_OPT = -O0 -ggdb -fomit-frame-pointer -falign-functions=16
|
||||
endif
|
||||
|
||||
# C specific options here (added to USE_OPT).
|
||||
|
|
Loading…
Reference in New Issue