1.驱动优化。
This commit is contained in:
@@ -18,6 +18,7 @@ enum drv_adc_index
|
||||
#ifdef MR_USING_ADC2
|
||||
DRV_INDEX_ADC2,
|
||||
#endif /* MR_USING_ADC2 */
|
||||
DRV_INDEX_ADC_MAX
|
||||
};
|
||||
|
||||
static const char *adc_name[] =
|
||||
@@ -114,7 +115,7 @@ static uint32_t drv_adc_read(struct mr_adc *adc, int channel)
|
||||
{
|
||||
struct drv_adc_data *adc_data = (struct drv_adc_data *)adc->dev.drv->data;
|
||||
struct drv_adc_channel_data *adc_channel_data = drv_adc_get_channel_data(channel);
|
||||
int i = 0;
|
||||
size_t i = 0;
|
||||
|
||||
/* Check channel is valid */
|
||||
if (adc_channel_data == NULL)
|
||||
@@ -124,15 +125,15 @@ static uint32_t drv_adc_read(struct mr_adc *adc, int channel)
|
||||
|
||||
/* Read data */
|
||||
#ifdef MR_USING_CH32V00X
|
||||
ADC_RegularChannelConfig(adc_data->instance, adc_channel_data->channel, 1, ADC_SampleTime_43Cycles);
|
||||
ADC_RegularChannelConfig(adc_data->instance, adc_channel_data->channel, 1, ADC_SampleTime_15Cycles);
|
||||
#else
|
||||
ADC_RegularChannelConfig(adc_data->instance, adc_channel_data->channel, 1, ADC_SampleTime_239Cycles5);
|
||||
ADC_RegularChannelConfig(adc_data->instance, adc_channel_data->channel, 1, ADC_SampleTime_13Cycles5);
|
||||
#endif /* MR_USING_CH32V00X */
|
||||
ADC_SoftwareStartConvCmd(adc_data->instance, ENABLE);
|
||||
while (ADC_GetFlagStatus(adc_data->instance, ADC_FLAG_EOC) == RESET)
|
||||
{
|
||||
i++;
|
||||
if (i > INT16_MAX)
|
||||
if (i > UINT16_MAX)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -166,13 +167,11 @@ static struct mr_drv adc_drv[] =
|
||||
#endif /* MR_USING_ADC2 */
|
||||
};
|
||||
|
||||
int drv_adc_init(void)
|
||||
static int drv_adc_init(void)
|
||||
{
|
||||
int index = 0;
|
||||
|
||||
for (index = 0; index < MR_ARRAY_NUM(adc_dev); index++)
|
||||
for (size_t i = 0; i < MR_ARRAY_NUM(adc_dev); i++)
|
||||
{
|
||||
mr_adc_register(&adc_dev[index], adc_name[index], &adc_drv[index]);
|
||||
mr_adc_register(&adc_dev[i], adc_name[i], &adc_drv[i]);
|
||||
}
|
||||
return MR_EOK;
|
||||
}
|
||||
|
||||
@@ -149,7 +149,7 @@ static struct mr_drv dac_drv =
|
||||
&dac_drv_data,
|
||||
};
|
||||
|
||||
int drv_dac_init(void)
|
||||
static int drv_dac_init(void)
|
||||
{
|
||||
return mr_dac_register(&dac_dev, "dac1", &dac_drv);
|
||||
}
|
||||
|
||||
@@ -18,6 +18,7 @@ enum drv_i2c_index
|
||||
#ifdef MR_USING_I2C2
|
||||
DRV_INDEX_I2C2,
|
||||
#endif /* MR_USING_I2C2 */
|
||||
DRV_INDEX_I2C_MAX
|
||||
};
|
||||
|
||||
static const char *i2c_bus_name[] =
|
||||
@@ -122,22 +123,22 @@ static int drv_i2c_bus_configure(struct mr_i2c_bus *i2c_bus, struct mr_i2c_confi
|
||||
I2C_ITConfig(i2c_bus_data->instance, I2C_IT_EVT, DISABLE);
|
||||
} else
|
||||
{
|
||||
I2C_ClearITPendingBit(i2c_bus_data->instance, I2C_IT_RXNE);
|
||||
I2C_ITConfig(i2c_bus_data->instance, I2C_IT_EVT, state);
|
||||
}
|
||||
I2C_ClearITPendingBit(i2c_bus_data->instance, I2C_IT_RXNE);
|
||||
return MR_EOK;
|
||||
}
|
||||
|
||||
static void drv_i2c_bus_start(struct mr_i2c_bus *i2c_bus)
|
||||
{
|
||||
struct drv_i2c_bus_data *i2c_bus_data = (struct drv_i2c_bus_data *)i2c_bus->dev.drv->data;
|
||||
int i = 0;
|
||||
size_t i = 0;
|
||||
|
||||
I2C_GenerateSTART(i2c_bus_data->instance, ENABLE);
|
||||
while (I2C_CheckEvent(i2c_bus_data->instance, I2C_EVENT_MASTER_MODE_SELECT) == RESET)
|
||||
{
|
||||
i++;
|
||||
if (i > INT16_MAX)
|
||||
if (i > UINT16_MAX)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -147,13 +148,13 @@ static void drv_i2c_bus_start(struct mr_i2c_bus *i2c_bus)
|
||||
static void drv_i2c_bus_send_addr(struct mr_i2c_bus *i2c_bus, int addr, int addr_bits)
|
||||
{
|
||||
struct drv_i2c_bus_data *i2c_bus_data = (struct drv_i2c_bus_data *)i2c_bus->dev.drv->data;
|
||||
int i = 0;
|
||||
size_t i = 0;
|
||||
|
||||
I2C_SendData(i2c_bus_data->instance, addr);
|
||||
while (I2C_CheckEvent(i2c_bus_data->instance, I2C_EVENT_MASTER_TRANSMITTER_MODE_SELECTED) == RESET)
|
||||
{
|
||||
i++;
|
||||
if (i > INT16_MAX)
|
||||
if (i > UINT16_MAX)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -166,7 +167,7 @@ static void drv_i2c_bus_send_addr(struct mr_i2c_bus *i2c_bus, int addr, int addr
|
||||
while (I2C_CheckEvent(i2c_bus_data->instance, I2C_EVENT_MASTER_BYTE_TRANSMITTED) == RESET)
|
||||
{
|
||||
i++;
|
||||
if (i > INT16_MAX)
|
||||
if (i > UINT16_MAX)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -184,7 +185,7 @@ static void drv_i2c_bus_stop(struct mr_i2c_bus *i2c_bus)
|
||||
static uint8_t drv_i2c_bus_read(struct mr_i2c_bus *i2c_bus, int ack_state)
|
||||
{
|
||||
struct drv_i2c_bus_data *i2c_bus_data = (struct drv_i2c_bus_data *)i2c_bus->dev.drv->data;
|
||||
int i = 0;
|
||||
size_t i = 0;
|
||||
|
||||
/* Control ack */
|
||||
I2C_AcknowledgeConfig(i2c_bus_data->instance, ack_state);
|
||||
@@ -193,7 +194,7 @@ static uint8_t drv_i2c_bus_read(struct mr_i2c_bus *i2c_bus, int ack_state)
|
||||
while (I2C_CheckEvent(i2c_bus_data->instance, I2C_EVENT_MASTER_BYTE_RECEIVED) == RESET)
|
||||
{
|
||||
i++;
|
||||
if (i > INT16_MAX)
|
||||
if (i > UINT16_MAX)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -204,14 +205,14 @@ static uint8_t drv_i2c_bus_read(struct mr_i2c_bus *i2c_bus, int ack_state)
|
||||
static void drv_i2c_bus_write(struct mr_i2c_bus *i2c_bus, uint8_t data)
|
||||
{
|
||||
struct drv_i2c_bus_data *i2c_bus_data = (struct drv_i2c_bus_data *)i2c_bus->dev.drv->data;
|
||||
int i = 0;
|
||||
size_t i = 0;
|
||||
|
||||
/* Write data */
|
||||
I2C_SendData(i2c_bus_data->instance, data);
|
||||
while (I2C_CheckEvent(i2c_bus_data->instance, I2C_EVENT_MASTER_BYTE_TRANSMITTED) == RESET)
|
||||
{
|
||||
i++;
|
||||
if (i > INT16_MAX)
|
||||
if (i > UINT16_MAX)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -273,13 +274,11 @@ static struct mr_drv i2c_bus_drv[] =
|
||||
#endif /* MR_USING_I2C2 */
|
||||
};
|
||||
|
||||
int drv_i2c_bus_init(void)
|
||||
static int drv_i2c_bus_init(void)
|
||||
{
|
||||
int index = 0;
|
||||
|
||||
for (index = 0; index < MR_ARRAY_NUM(i2c_bus_dev); index++)
|
||||
for (size_t i = 0; i < MR_ARRAY_NUM(i2c_bus_dev); i++)
|
||||
{
|
||||
mr_i2c_bus_register(&i2c_bus_dev[index], i2c_bus_name[index], &i2c_bus_drv[index]);
|
||||
mr_i2c_bus_register(&i2c_bus_dev[i], i2c_bus_name[i], &i2c_bus_drv[i]);
|
||||
}
|
||||
return MR_EOK;
|
||||
}
|
||||
|
||||
@@ -447,7 +447,7 @@ static struct mr_drv pin_drv =
|
||||
MR_NULL
|
||||
};
|
||||
|
||||
int drv_pin_init(void)
|
||||
static int drv_pin_init(void)
|
||||
{
|
||||
return mr_pin_register(&pin_dev, "pin", &pin_drv);
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@ enum drv_serial_index
|
||||
#ifdef MR_USING_UART8
|
||||
DRV_INDEX_UART8,
|
||||
#endif /* MR_USING_UART8 */
|
||||
DRV_INDEX_UART_MAX
|
||||
};
|
||||
|
||||
static const char *serial_name[] =
|
||||
@@ -241,26 +242,25 @@ static int drv_serial_configure(struct mr_serial *serial, struct mr_serial_confi
|
||||
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
|
||||
NVIC_InitStructure.NVIC_IRQChannelCmd = state;
|
||||
NVIC_Init(&NVIC_InitStructure);
|
||||
USART_ClearITPendingBit(serial_data->instance, USART_IT_RXNE);
|
||||
USART_ITConfig(serial_data->instance, USART_IT_RXNE, state);
|
||||
if (state == DISABLE)
|
||||
{
|
||||
USART_ITConfig(serial_data->instance, USART_IT_TXE, DISABLE);
|
||||
}
|
||||
USART_ClearITPendingBit(serial_data->instance, USART_IT_RXNE);
|
||||
USART_ClearITPendingBit(serial_data->instance, USART_IT_TXE);
|
||||
return MR_EOK;
|
||||
}
|
||||
|
||||
static uint8_t drv_serial_read(struct mr_serial *serial)
|
||||
{
|
||||
struct drv_serial_data *serial_data = (struct drv_serial_data *)serial->dev.drv->data;
|
||||
int i = 0;
|
||||
size_t i = 0;
|
||||
|
||||
/* Read data */
|
||||
while (USART_GetFlagStatus(serial_data->instance, USART_FLAG_RXNE) == RESET)
|
||||
{
|
||||
i++;
|
||||
if (i > INT16_MAX)
|
||||
if (i > UINT16_MAX)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -271,14 +271,14 @@ static uint8_t drv_serial_read(struct mr_serial *serial)
|
||||
static void drv_serial_write(struct mr_serial *serial, uint8_t data)
|
||||
{
|
||||
struct drv_serial_data *serial_data = (struct drv_serial_data *)serial->dev.drv->data;
|
||||
int i = 0;
|
||||
size_t i = 0;
|
||||
|
||||
/* Write data */
|
||||
USART_SendData(serial_data->instance, data);
|
||||
while (USART_GetFlagStatus(serial_data->instance, USART_FLAG_TC) == RESET)
|
||||
{
|
||||
i++;
|
||||
if (i > INT16_MAX)
|
||||
if (i > UINT16_MAX)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -290,6 +290,7 @@ static void drv_serial_start_tx(struct mr_serial *serial)
|
||||
struct drv_serial_data *serial_data = (struct drv_serial_data *)serial->dev.drv->data;
|
||||
|
||||
/* Enable TX interrupt */
|
||||
USART_ClearITPendingBit(serial_data->instance, USART_IT_TXE);
|
||||
USART_ITConfig(serial_data->instance, USART_IT_TXE, ENABLE);
|
||||
}
|
||||
|
||||
@@ -451,13 +452,11 @@ static struct mr_drv serial_drv[] =
|
||||
#endif /* MR_USING_UART8 */
|
||||
};
|
||||
|
||||
int drv_serial_init(void)
|
||||
static int drv_serial_init(void)
|
||||
{
|
||||
int index = 0;
|
||||
|
||||
for (index = 0; index < MR_ARRAY_NUM(serial_dev); index++)
|
||||
for (size_t i = 0; i < MR_ARRAY_NUM(serial_dev); i++)
|
||||
{
|
||||
mr_serial_register(&serial_dev[index], serial_name[index], &serial_drv[index]);
|
||||
mr_serial_register(&serial_dev[i], serial_name[i], &serial_drv[i]);
|
||||
}
|
||||
return MR_EOK;
|
||||
}
|
||||
|
||||
@@ -21,6 +21,7 @@ enum drv_spi_bus_index
|
||||
#ifdef MR_USING_SPI3
|
||||
DRV_INDEX_SPI3,
|
||||
#endif /* MR_USING_SPI3 */
|
||||
DRV_INDEX_SPI_MAX
|
||||
};
|
||||
|
||||
static const char *spi_bus_name[] =
|
||||
@@ -257,21 +258,21 @@ static int drv_spi_bus_configure(struct mr_spi_bus *spi_bus, struct mr_spi_confi
|
||||
SPI_I2S_ITConfig(spi_bus_data->instance, SPI_I2S_IT_RXNE, DISABLE);
|
||||
} else
|
||||
{
|
||||
SPI_I2S_ClearITPendingBit(spi_bus_data->instance, SPI_I2S_IT_RXNE);
|
||||
SPI_I2S_ITConfig(spi_bus_data->instance, SPI_I2S_IT_RXNE, state);
|
||||
}
|
||||
SPI_I2S_ClearITPendingBit(spi_bus_data->instance, SPI_I2S_IT_RXNE);
|
||||
return MR_EOK;
|
||||
}
|
||||
|
||||
static uint32_t drv_spi_bus_read(struct mr_spi_bus *spi_bus)
|
||||
{
|
||||
struct drv_spi_bus_data *spi_bus_data = (struct drv_spi_bus_data *)spi_bus->dev.drv->data;
|
||||
int i = 0;
|
||||
size_t i = 0;
|
||||
|
||||
while (SPI_I2S_GetFlagStatus(spi_bus_data->instance, SPI_I2S_FLAG_RXNE) == RESET)
|
||||
{
|
||||
i++;
|
||||
if (i > INT16_MAX)
|
||||
if (i > UINT16_MAX)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
@@ -282,13 +283,13 @@ static uint32_t drv_spi_bus_read(struct mr_spi_bus *spi_bus)
|
||||
static void drv_spi_bus_write(struct mr_spi_bus *spi_bus, uint32_t data)
|
||||
{
|
||||
struct drv_spi_bus_data *spi_bus_data = (struct drv_spi_bus_data *)spi_bus->dev.drv->data;
|
||||
int i = 0;
|
||||
size_t i = 0;
|
||||
|
||||
SPI_I2S_SendData(spi_bus_data->instance, data);
|
||||
while (SPI_I2S_GetFlagStatus(spi_bus_data->instance, SPI_I2S_FLAG_TXE) == RESET)
|
||||
{
|
||||
i++;
|
||||
if (i > INT16_MAX)
|
||||
if (i > UINT16_MAX)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@@ -362,13 +363,11 @@ static struct mr_drv spi_bus_drv[] =
|
||||
#endif /* MR_USING_SPI3 */
|
||||
};
|
||||
|
||||
int drv_spi_bus_init(void)
|
||||
static int drv_spi_bus_init(void)
|
||||
{
|
||||
int index = 0;
|
||||
|
||||
for (index = 0; index < MR_ARRAY_NUM(spi_bus_dev); index++)
|
||||
for (size_t i = 0; i < MR_ARRAY_NUM(spi_bus_dev); i++)
|
||||
{
|
||||
mr_spi_bus_register(&spi_bus_dev[index], spi_bus_name[index], &spi_bus_drv[index]);
|
||||
mr_spi_bus_register(&spi_bus_dev[i], spi_bus_name[i], &spi_bus_drv[i]);
|
||||
}
|
||||
return MR_EOK;
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ enum drv_timer_index
|
||||
#ifdef MR_USING_TIMER10
|
||||
DRV_INDEX_TIMER10,
|
||||
#endif /* MR_USING_TIMER10 */
|
||||
DRV_INDEX_TIMER_MAX
|
||||
};
|
||||
|
||||
static const char *timer_name[] =
|
||||
@@ -173,8 +174,9 @@ static int drv_timer_configure(struct mr_timer *timer, int state)
|
||||
|
||||
/* Configure timer */
|
||||
TIM_TimeBaseInitStructure.TIM_Period = 0;
|
||||
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
||||
TIM_TimeBaseInitStructure.TIM_Prescaler = 0;
|
||||
TIM_TimeBaseInitStructure.TIM_RepetitionCounter = 0;
|
||||
TIM_TimeBaseInitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
|
||||
TIM_TimeBaseInitStructure.TIM_CounterMode = TIM_CounterMode_Up;
|
||||
TIM_TimeBaseInit(timer_data->instance, &TIM_TimeBaseInitStructure);
|
||||
|
||||
@@ -184,8 +186,10 @@ static int drv_timer_configure(struct mr_timer *timer, int state)
|
||||
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 1;
|
||||
NVIC_InitStructure.NVIC_IRQChannelCmd = state;
|
||||
NVIC_Init(&NVIC_InitStructure);
|
||||
TIM_ITConfig(timer_data->instance, TIM_IT_Update, state);
|
||||
TIM_ClearITPendingBit(timer_data->instance, TIM_IT_Update);
|
||||
if (state == DISABLE)
|
||||
{
|
||||
TIM_Cmd(timer_data->instance, DISABLE);
|
||||
}
|
||||
return MR_EOK;
|
||||
}
|
||||
|
||||
@@ -194,9 +198,11 @@ static void drv_timer_start(struct mr_timer *timer, uint32_t prescaler, uint32_t
|
||||
struct drv_timer_data *timer_data = (struct drv_timer_data *)timer->dev.drv->data;
|
||||
|
||||
/* Set the PSC and ARR, and enable the timer */
|
||||
timer_data->instance->CNT = 0;
|
||||
timer_data->instance->PSC = prescaler - 1;
|
||||
timer_data->instance->ATRLR = period - 1;
|
||||
TIM_SetCounter(timer_data->instance, 0);
|
||||
TIM_SetAutoreload(timer_data->instance, period - 1);
|
||||
TIM_PrescalerConfig(timer_data->instance, prescaler - 1, TIM_PSCReloadMode_Immediate);
|
||||
TIM_ClearITPendingBit(timer_data->instance, TIM_IT_Update);
|
||||
TIM_ITConfig(timer_data->instance, TIM_IT_Update, state);
|
||||
TIM_Cmd(timer_data->instance, ENABLE);
|
||||
}
|
||||
|
||||
@@ -212,7 +218,7 @@ static uint32_t drv_timer_get_count(struct mr_timer *timer)
|
||||
{
|
||||
struct drv_timer_data *timer_data = (struct drv_timer_data *)timer->dev.drv->data;
|
||||
|
||||
return timer_data->instance->CNT;
|
||||
return TIM_GetCounter(timer_data->instance);
|
||||
}
|
||||
|
||||
static void drv_timer_isr(struct mr_timer *timer)
|
||||
@@ -388,13 +394,11 @@ static struct mr_drv timer_drv[] =
|
||||
#endif /* MR_USING_TIMER10 */
|
||||
};
|
||||
|
||||
int drv_timer_init(void)
|
||||
static int drv_timer_init(void)
|
||||
{
|
||||
int index = 0;
|
||||
|
||||
for (index = 0; index < MR_ARRAY_NUM(timer_dev); index++)
|
||||
for (size_t i = 0; i < MR_ARRAY_NUM(timer_dev); i++)
|
||||
{
|
||||
mr_timer_register(&timer_dev[index], timer_name[index], &timer_drv[index], &timer_info[index]);
|
||||
mr_timer_register(&timer_dev[i], timer_name[i], &timer_drv[i], &timer_info[i]);
|
||||
}
|
||||
return MR_EOK;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user