Small API additions and minor fixes (#406)
* Add missing DREQ_s * store actual clock frequency in clock_configure (fixes #368) * use dma DREQ values defined in dreqs/dma.h * Fix hw_is_claimed, and add xxx_is_claimed APIs * Add some PIO irq helper methods * Add DMA channel IRQ status getter and clear methods * Implement the correct PIO IRQ status/clear methods (good to have methods here as the h/w interrupt registers are super confusing) * fix pico_multicore dependencies * add missing wrapper func __aeabi_f2d * Further DMA/PIO IRQ API cleanup (and review fixes) * add PICO_INT64_OPS_IN_RAM flag
This commit is contained in:
@ -55,7 +55,7 @@ typedef struct {
|
||||
} interp_config;
|
||||
|
||||
static inline uint interp_index(interp_hw_t *interp) {
|
||||
assert(interp == interp0 || interp == interp1);
|
||||
valid_params_if(INTERP, interp == interp0 || interp == interp1);
|
||||
return interp == interp1 ? 1 : 0;
|
||||
}
|
||||
|
||||
@ -70,6 +70,8 @@ static inline uint interp_index(interp_hw_t *interp) {
|
||||
* \param lane The lane number, 0 or 1.
|
||||
*/
|
||||
void interp_claim_lane(interp_hw_t *interp, uint lane);
|
||||
// The above really should be called this for consistency
|
||||
#define interp_lane_claim interp_claim_lane
|
||||
|
||||
/*! \brief Claim the interpolator lanes specified in the mask
|
||||
* \ingroup hardware_interp
|
||||
@ -86,6 +88,19 @@ void interp_claim_lane_mask(interp_hw_t *interp, uint lane_mask);
|
||||
* \param lane The lane number, 0 or 1
|
||||
*/
|
||||
void interp_unclaim_lane(interp_hw_t *interp, uint lane);
|
||||
// The above really should be called this for consistency
|
||||
#define interp_lane_unclaim interp_unclaim_lane
|
||||
|
||||
/*! \brief Determine if an interpolator lane is claimed
|
||||
* \ingroup hardware_interp
|
||||
*
|
||||
* \param interp Interpolator whose lane to check
|
||||
* \param lane The lane number, 0 or 1
|
||||
* \return true if claimed, false otherwise
|
||||
* \see interp_claim_lane
|
||||
* \see interp_claim_lane_mask
|
||||
*/
|
||||
bool interp_lane_is_claimed(interp_hw_t *interp, uint lane);
|
||||
|
||||
/*! \brief Release previously claimed interpolator lanes \see interp_claim_lane_mask
|
||||
* \ingroup hardware_interp
|
||||
|
@ -16,14 +16,13 @@ static_assert(NUM_DMA_CHANNELS <= 16, "");
|
||||
|
||||
static uint8_t _claimed;
|
||||
|
||||
static inline uint interp_get_bit(interp_hw_t *interp, uint lane) {
|
||||
return 1u << ((interp_index(interp) << 1u) | lane);
|
||||
static inline uint interp_lane_bit(interp_hw_t * interp, uint lane) {
|
||||
return (interp_index(interp) << 1u) | lane;
|
||||
}
|
||||
|
||||
void interp_claim_lane(interp_hw_t *interp, uint lane) {
|
||||
valid_params_if(INTERP, lane < 2);
|
||||
uint bit = interp_get_bit(interp, lane);
|
||||
hw_claim_or_assert((uint8_t *) &_claimed, bit, "Lane is already claimed");
|
||||
hw_claim_or_assert((uint8_t *) &_claimed, interp_lane_bit(interp, lane), "Lane is already claimed");
|
||||
}
|
||||
|
||||
void interp_claim_lane_mask(interp_hw_t *interp, uint lane_mask) {
|
||||
@ -34,12 +33,16 @@ void interp_claim_lane_mask(interp_hw_t *interp, uint lane_mask) {
|
||||
|
||||
void interp_unclaim_lane(interp_hw_t *interp, uint lane) {
|
||||
valid_params_if(INTERP, lane < 2);
|
||||
uint bit = interp_get_bit(interp, lane);
|
||||
hw_claim_clear(&_claimed, bit);
|
||||
hw_claim_clear((uint8_t *) &_claimed, interp_lane_bit(interp, lane));
|
||||
}
|
||||
|
||||
bool interp_lane_is_claimed(interp_hw_t *interp, uint lane) {
|
||||
valid_params_if(INTERP, lane < 2);
|
||||
return hw_is_claimed((uint8_t *) &_claimed, interp_lane_bit(interp, lane));
|
||||
}
|
||||
|
||||
void interp_unclaim_lane_mask(interp_hw_t *interp, uint lane_mask) {
|
||||
valid_params_if(INTERP, lane_mask && lane_mask <= 0x3);
|
||||
valid_params_if(INTERP, lane_mask <= 0x3);
|
||||
if (lane_mask & 1u) interp_unclaim_lane(interp, 0);
|
||||
if (lane_mask & 2u) interp_unclaim_lane(interp, 1);
|
||||
}
|
||||
|
Reference in New Issue
Block a user