Made adc_read_injected() return signed int because result can become negative
Added function can_fifo_pending() - number of pending RX messages can_receive() returns number of pending messages prior to release
This commit is contained in:
committed by
Piotr Esden-Tempski
parent
3b892e4a18
commit
d1b43a7bb9
@@ -668,12 +668,13 @@ void can_disable_irq(uint32_t canport, uint32_t irq);
|
|||||||
|
|
||||||
int can_transmit(uint32_t canport, uint32_t id, bool ext, bool rtr,
|
int can_transmit(uint32_t canport, uint32_t id, bool ext, bool rtr,
|
||||||
uint8_t length, uint8_t *data);
|
uint8_t length, uint8_t *data);
|
||||||
void can_receive(uint32_t canport, uint8_t fifo, bool release, uint32_t *id,
|
uint32_t can_receive(uint32_t canport, uint8_t fifo, bool release, uint32_t *id,
|
||||||
bool *ext, bool *rtr, uint8_t *fmi, uint8_t *length,
|
bool *ext, bool *rtr, uint8_t *fmi, uint8_t *length,
|
||||||
uint8_t *data, uint16_t *timestamp);
|
uint8_t *data, uint16_t *timestamp);
|
||||||
|
|
||||||
void can_fifo_release(uint32_t canport, uint8_t fifo);
|
void can_fifo_release(uint32_t canport, uint8_t fifo);
|
||||||
bool can_available_mailbox(uint32_t canport);
|
bool can_available_mailbox(uint32_t canport);
|
||||||
|
uint32_t can_fifo_pending(uint32_t canport, uint8_t fifo);
|
||||||
END_DECLS
|
END_DECLS
|
||||||
|
|
||||||
/**@}*/
|
/**@}*/
|
||||||
|
|||||||
@@ -399,7 +399,7 @@ void adc_set_right_aligned(uint32_t adc);
|
|||||||
bool adc_eoc(uint32_t adc);
|
bool adc_eoc(uint32_t adc);
|
||||||
bool adc_eoc_injected(uint32_t adc);
|
bool adc_eoc_injected(uint32_t adc);
|
||||||
uint32_t adc_read_regular(uint32_t adc);
|
uint32_t adc_read_regular(uint32_t adc);
|
||||||
uint32_t adc_read_injected(uint32_t adc, uint8_t reg);
|
int32_t adc_read_injected(uint32_t adc, uint8_t reg);
|
||||||
void adc_set_continuous_conversion_mode(uint32_t adc);
|
void adc_set_continuous_conversion_mode(uint32_t adc);
|
||||||
void adc_set_single_conversion_mode(uint32_t adc);
|
void adc_set_single_conversion_mode(uint32_t adc);
|
||||||
void adc_set_regular_sequence(uint32_t adc, uint8_t length, uint8_t channel[]);
|
void adc_set_regular_sequence(uint32_t adc, uint8_t length, uint8_t channel[]);
|
||||||
|
|||||||
@@ -466,11 +466,15 @@ void can_fifo_release(uint32_t canport, uint8_t fifo)
|
|||||||
@param[out] data Unsigned int8[]. Message payload data.
|
@param[out] data Unsigned int8[]. Message payload data.
|
||||||
@param[out] timestamp Pointer to store the message timestamp.
|
@param[out] timestamp Pointer to store the message timestamp.
|
||||||
Only valid on time triggered CAN. Use NULL to ignore.
|
Only valid on time triggered CAN. Use NULL to ignore.
|
||||||
|
@returns int 0-3 depending on how many messages where pending before
|
||||||
|
releasing the FIFO.
|
||||||
|
when 0 is returned no message could be retrieved
|
||||||
*/
|
*/
|
||||||
void can_receive(uint32_t canport, uint8_t fifo, bool release, uint32_t *id,
|
uint32_t can_receive(uint32_t canport, uint8_t fifo, bool release, uint32_t *id,
|
||||||
bool *ext, bool *rtr, uint8_t *fmi, uint8_t *length,
|
bool *ext, bool *rtr, uint8_t *fmi, uint8_t *length,
|
||||||
uint8_t *data, uint16_t *timestamp)
|
uint8_t *data, uint16_t *timestamp)
|
||||||
{
|
{
|
||||||
|
uint32_t pending_cnt = can_fifo_pending(canport, fifo);
|
||||||
uint32_t fifo_id = 0;
|
uint32_t fifo_id = 0;
|
||||||
union {
|
union {
|
||||||
uint8_t data8[4];
|
uint8_t data8[4];
|
||||||
@@ -542,9 +546,28 @@ void can_receive(uint32_t canport, uint8_t fifo, bool release, uint32_t *id,
|
|||||||
if (release) {
|
if (release) {
|
||||||
can_fifo_release(canport, fifo);
|
can_fifo_release(canport, fifo);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return pending_cnt;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool can_available_mailbox(uint32_t canport)
|
bool can_available_mailbox(uint32_t canport)
|
||||||
{
|
{
|
||||||
return CAN_TSR(canport) & (CAN_TSR_TME0 | CAN_TSR_TME1 | CAN_TSR_TME2);
|
return CAN_TSR(canport) & (CAN_TSR_TME0 | CAN_TSR_TME1 | CAN_TSR_TME2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*---------------------------------------------------------------------------*/
|
||||||
|
/** @brief CAN get number of pending RX messages
|
||||||
|
|
||||||
|
@param[in] canport Unsigned int32. CAN block register base @ref can_reg_base.
|
||||||
|
@param[in] fifo Unsigned int8. FIFO id.
|
||||||
|
@returns int 1, 2 or 3 if messages are pending in given fifo, 0 otherwise.
|
||||||
|
*/
|
||||||
|
uint32_t can_fifo_pending(uint32_t canport, uint8_t fifo)
|
||||||
|
{
|
||||||
|
if (fifo == 0) {
|
||||||
|
return CAN_RF0R(canport) & CAN_RF0R_FMP0_MASK;
|
||||||
|
} else {
|
||||||
|
return CAN_RF1R(canport) & CAN_RF1R_FMP1_MASK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -480,17 +480,17 @@ adc_set_injected_offset.
|
|||||||
@returns Unsigned int32 conversion result.
|
@returns Unsigned int32 conversion result.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
uint32_t adc_read_injected(uint32_t adc, uint8_t reg)
|
int32_t adc_read_injected(uint32_t adc, uint8_t reg)
|
||||||
{
|
{
|
||||||
switch (reg) {
|
switch (reg) {
|
||||||
case 1:
|
case 1:
|
||||||
return ADC_JDR1(adc);
|
return (int16_t)ADC_JDR1(adc);
|
||||||
case 2:
|
case 2:
|
||||||
return ADC_JDR2(adc);
|
return (int16_t)ADC_JDR2(adc);
|
||||||
case 3:
|
case 3:
|
||||||
return ADC_JDR3(adc);
|
return (int16_t)ADC_JDR3(adc);
|
||||||
case 4:
|
case 4:
|
||||||
return ADC_JDR4(adc);
|
return (int16_t)ADC_JDR4(adc);
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user