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:
@ -14,22 +14,13 @@ void hw_claim_unlock(uint32_t save) {
|
||||
spin_unlock(spin_lock_instance(PICO_SPINLOCK_ID_HARDWARE_CLAIM), save);
|
||||
}
|
||||
|
||||
bool hw_is_claimed(uint8_t *bits, uint bit_index) {
|
||||
bool rc;
|
||||
uint32_t save = hw_claim_lock();
|
||||
if (bits[bit_index >> 3u] & (1u << (bit_index & 7u))) {
|
||||
rc = false;
|
||||
} else {
|
||||
bits[bit_index >> 3u] |= (uint8_t)(1u << (bit_index & 7u));
|
||||
rc = true;
|
||||
}
|
||||
hw_claim_unlock(save);
|
||||
return rc;
|
||||
inline bool hw_is_claimed(const uint8_t *bits, uint bit_index) {
|
||||
return (bits[bit_index >> 3u] & (1u << (bit_index & 7u)));
|
||||
}
|
||||
|
||||
void hw_claim_or_assert(uint8_t *bits, uint bit_index, const char *message) {
|
||||
uint32_t save = hw_claim_lock();
|
||||
if (bits[bit_index >> 3u] & (1u << (bit_index & 7u))) {
|
||||
if (hw_is_claimed(bits, bit_index)) {
|
||||
panic(message, bit_index);
|
||||
} else {
|
||||
bits[bit_index >> 3u] |= (uint8_t)(1u << (bit_index & 7u));
|
||||
@ -42,7 +33,7 @@ int hw_claim_unused_from_range(uint8_t *bits, bool required, uint bit_lsb, uint
|
||||
uint32_t save = hw_claim_lock();
|
||||
int found_bit = -1;
|
||||
for(uint bit=bit_lsb; bit <= bit_msb; bit++) {
|
||||
if (!(bits[bit >> 3u] & (1u << (bit & 7u)))) {
|
||||
if (!hw_is_claimed(bits, bit)) {
|
||||
bits[bit >> 3u] |= (uint8_t)(1u << (bit & 7u));
|
||||
found_bit = (int)bit;
|
||||
break;
|
||||
@ -57,7 +48,7 @@ int hw_claim_unused_from_range(uint8_t *bits, bool required, uint bit_lsb, uint
|
||||
|
||||
void hw_claim_clear(uint8_t *bits, uint bit_index) {
|
||||
uint32_t save = hw_claim_lock();
|
||||
assert(bits[bit_index >> 3u] & (1u << (bit_index & 7u)));
|
||||
assert(hw_is_claimed(bits, bit_index));
|
||||
bits[bit_index >> 3u] &= (uint8_t) ~(1u << (bit_index & 7u));
|
||||
hw_claim_unlock(save);
|
||||
}
|
||||
|
@ -65,10 +65,10 @@ int hw_claim_unused_from_range(uint8_t *bits, bool required, uint bit_lsb, uint
|
||||
* The resource ownership is indicated by the bit_index bit in an array of bits.
|
||||
*
|
||||
* \param bits pointer to an array of bits (8 bits per byte)
|
||||
* \param bit_index resource to unclaim (bit index into array of bits)
|
||||
* \param bit_index resource to check (bit index into array of bits)
|
||||
* \return true if the resource is claimed
|
||||
*/
|
||||
bool hw_is_claimed(uint8_t *bits, uint bit_index);
|
||||
bool hw_is_claimed(const uint8_t *bits, uint bit_index);
|
||||
|
||||
/*! \brief Atomically unclaim a resource
|
||||
* \ingroup hardware_claim
|
||||
|
Reference in New Issue
Block a user