Browse Source

Add volatile to all DMAChannel source address pointers

teensy4-core
PaulStoffregen 10 years ago
parent
commit
064c0b52ee
1 changed files with 34 additions and 34 deletions
  1. +34
    -34
      teensy3/DMAChannel.h

+ 34
- 34
teensy3/DMAChannel.h View File



// Use a single variable as the data source. Typically a register // Use a single variable as the data source. Typically a register
// for receiving data from one of the hardware peripherals is used. // for receiving data from one of the hardware peripherals is used.
void source(const signed char &p) { source(*(const uint8_t *)&p); }
void source(const unsigned char &p) {
void source(volatile const signed char &p) { source(*(volatile const uint8_t *)&p); }
void source(volatile const unsigned char &p) {
TCD->SADDR = &p; TCD->SADDR = &p;
TCD->SOFF = 0; TCD->SOFF = 0;
TCD->ATTR_SRC = 0; TCD->ATTR_SRC = 0;
if ((uint32_t)p < 0x40000000 || TCD->NBYTES == 0) TCD->NBYTES = 1; if ((uint32_t)p < 0x40000000 || TCD->NBYTES == 0) TCD->NBYTES = 1;
TCD->SLAST = 0; TCD->SLAST = 0;
} }
void source(const signed short &p) { source(*(const uint16_t *)&p); }
void source(const unsigned short &p) {
void source(volatile const signed short &p) { source(*(volatile const uint16_t *)&p); }
void source(volatile const unsigned short &p) {
TCD->SADDR = &p; TCD->SADDR = &p;
TCD->SOFF = 0; TCD->SOFF = 0;
TCD->ATTR_SRC = 1; TCD->ATTR_SRC = 1;
if ((uint32_t)p < 0x40000000 || TCD->NBYTES == 0) TCD->NBYTES = 2; if ((uint32_t)p < 0x40000000 || TCD->NBYTES == 0) TCD->NBYTES = 2;
TCD->SLAST = 0; TCD->SLAST = 0;
} }
void source(const signed int &p) { source(*(const uint32_t *)&p); }
void source(const unsigned int &p) { source(*(const uint32_t *)&p); }
void source(const signed long &p) { source(*(const uint32_t *)&p); }
void source(const unsigned long &p) {
void source(volatile const signed int &p) { source(*(volatile const uint32_t *)&p); }
void source(volatile const unsigned int &p) { source(*(volatile const uint32_t *)&p); }
void source(volatile const signed long &p) { source(*(volatile const uint32_t *)&p); }
void source(volatile const unsigned long &p) {
TCD->SADDR = &p; TCD->SADDR = &p;
TCD->SOFF = 0; TCD->SOFF = 0;
TCD->ATTR_SRC = 2; TCD->ATTR_SRC = 2;


// Use a buffer (array of data) as the data source. Typically a // Use a buffer (array of data) as the data source. Typically a
// buffer for transmitting data is used. // buffer for transmitting data is used.
void sourceBuffer(const signed char p[], unsigned int len) {
sourceBuffer((uint8_t *)p, len); }
void sourceBuffer(const unsigned char p[], unsigned int len) {
void sourceBuffer(volatile const signed char p[], unsigned int len) {
sourceBuffer((volatile const uint8_t *)p, len); }
void sourceBuffer(volatile const unsigned char p[], unsigned int len) {
TCD->SADDR = p; TCD->SADDR = p;
TCD->SOFF = 1; TCD->SOFF = 1;
TCD->ATTR_SRC = 0; TCD->ATTR_SRC = 0;
TCD->BITER = len; TCD->BITER = len;
TCD->CITER = len; TCD->CITER = len;
} }
void sourceBuffer(const signed short p[], unsigned int len) {
sourceBuffer((uint16_t *)p, len); }
void sourceBuffer(const unsigned short p[], unsigned int len) {
void sourceBuffer(volatile const signed short p[], unsigned int len) {
sourceBuffer((volatile const uint16_t *)p, len); }
void sourceBuffer(volatile const unsigned short p[], unsigned int len) {
TCD->SADDR = p; TCD->SADDR = p;
TCD->SOFF = 2; TCD->SOFF = 2;
TCD->ATTR_SRC = 1; TCD->ATTR_SRC = 1;
TCD->BITER = len / 2; TCD->BITER = len / 2;
TCD->CITER = len / 2; TCD->CITER = len / 2;
} }
void sourceBuffer(const signed int p[], unsigned int len) {
sourceBuffer((uint32_t *)p, len); }
void sourceBuffer(const unsigned int p[], unsigned int len) {
sourceBuffer((uint32_t *)p, len); }
void sourceBuffer(const signed long p[], unsigned int len) {
sourceBuffer((uint32_t *)p, len); }
void sourceBuffer(const unsigned long p[], unsigned int len) {
void sourceBuffer(volatile const signed int p[], unsigned int len) {
sourceBuffer((volatile const uint32_t *)p, len); }
void sourceBuffer(volatile const unsigned int p[], unsigned int len) {
sourceBuffer((volatile const uint32_t *)p, len); }
void sourceBuffer(volatile const signed long p[], unsigned int len) {
sourceBuffer((volatile const uint32_t *)p, len); }
void sourceBuffer(volatile const unsigned long p[], unsigned int len) {
TCD->SADDR = p; TCD->SADDR = p;
TCD->SOFF = 4; TCD->SOFF = 4;
TCD->ATTR_SRC = 2; TCD->ATTR_SRC = 2;
} }


// Use a circular buffer as the data source // Use a circular buffer as the data source
void sourceCircular(const signed char p[], unsigned int len) {
sourceCircular((uint8_t *)p, len); }
void sourceCircular(const unsigned char p[], unsigned int len) {
void sourceCircular(volatile const signed char p[], unsigned int len) {
sourceCircular((volatile const uint8_t *)p, len); }
void sourceCircular(volatile const unsigned char p[], unsigned int len) {
TCD->SADDR = p; TCD->SADDR = p;
TCD->SOFF = 1; TCD->SOFF = 1;
TCD->ATTR_SRC = ((31 - __builtin_clz(len)) << 3); TCD->ATTR_SRC = ((31 - __builtin_clz(len)) << 3);
TCD->BITER = len; TCD->BITER = len;
TCD->CITER = len; TCD->CITER = len;
} }
void sourceCircular(const signed short p[], unsigned int len) {
sourceCircular((uint16_t *)p, len); }
void sourceCircular(const unsigned short p[], unsigned int len) {
void sourceCircular(volatile const signed short p[], unsigned int len) {
sourceCircular((volatile const uint16_t *)p, len); }
void sourceCircular(volatile const unsigned short p[], unsigned int len) {
TCD->SADDR = p; TCD->SADDR = p;
TCD->SOFF = 2; TCD->SOFF = 2;
TCD->ATTR_SRC = ((31 - __builtin_clz(len)) << 3) | 1; TCD->ATTR_SRC = ((31 - __builtin_clz(len)) << 3) | 1;
TCD->BITER = len / 2; TCD->BITER = len / 2;
TCD->CITER = len / 2; TCD->CITER = len / 2;
} }
void sourceCircular(const signed int p[], unsigned int len) {
sourceCircular((uint32_t *)p, len); }
void sourceCircular(const unsigned int p[], unsigned int len) {
sourceCircular((uint32_t *)p, len); }
void sourceCircular(const signed long p[], unsigned int len) {
sourceCircular((uint32_t *)p, len); }
void sourceCircular(const unsigned long p[], unsigned int len) {
void sourceCircular(volatile const signed int p[], unsigned int len) {
sourceCircular((volatile const uint32_t *)p, len); }
void sourceCircular(volatile const unsigned int p[], unsigned int len) {
sourceCircular((volatile const uint32_t *)p, len); }
void sourceCircular(volatile const signed long p[], unsigned int len) {
sourceCircular((volatile const uint32_t *)p, len); }
void sourceCircular(volatile const unsigned long p[], unsigned int len) {
TCD->SADDR = p; TCD->SADDR = p;
TCD->SOFF = 4; TCD->SOFF = 4;
TCD->ATTR_SRC = ((31 - __builtin_clz(len)) << 3) | 2; TCD->ATTR_SRC = ((31 - __builtin_clz(len)) << 3) | 2;

Loading…
Cancel
Save