必须在一个周期里面发送全部数据
时间: 2024-03-12 16:47:50 浏览: 22
如果必须在一个周期里面发送全部数据,而SPI的数据位宽只有8位,那么就需要将72位数据拆分成9个8位数据,并通过SPI接口在一个时钟周期内依次发送出去。为了实现这个功能,可以使用SPI的DMA传输模式。下面是使用DMA传输模式发送数据的示例代码:
```c
#define RGB_DATA_LEN 9
void rgb2byte(unsigned char r, unsigned char g, unsigned char b, unsigned char* rgbdim) {
char gstr[9], rstr[9], bstr[9];
byte2bin(g, gstr);
byte2bin(r, rstr);
byte2bin(b, bstr);
int i = 0;
char spistr[72];
for (i = 0; i < 8; i++) {
if (gstr[i] == '0') {
spistr[i*3] = '0';
spistr[i*3+1] = '0';
spistr[i*3+2] = '1';
} else {
spistr[i*3] = '0';
spistr[i*3+1] = '1';
spistr[i*3+2] = '1';
}
if (rstr[i] == '0') {
spistr[i*3+24] = '0';
spistr[i*3+25] = '0';
spistr[i*3+26] = '1';
} else {
spistr[i*3+24] = '0';
spistr[i*3+25] = '1';
spistr[i*3+26] = '1';
}
if (bstr[i] == '0') {
spistr[i*3+48] = '0';
spistr[i*3+49] = '0';
spistr[i*3+50] = '1';
} else {
spistr[i*3+48] = '0';
spistr[i*3+49] = '1';
spistr[i*3+50] = '1';
}
}
spistr[72] = '\0';
for (i = 0; i < RGB_DATA_LEN; i++) {
char byte_str[9];
int j;
for (j = 0; j < 8; j++) {
byte_str[j] = spistr[i*8+j];
}
byte_str[8] = '\0';
rgbdim[i] = (unsigned char) strtol(byte_str, NULL, 2);
}
// 使用DMA传输模式
spi_dma_send_data(rgbdim, RGB_DATA_LEN);
}
```
在这个代码中,我们将输出的72位数据拆分成了9个8位数据,存储在数组rgbdim中。然后,我们通过SPI接口使用DMA传输模式依次发送这个数组中的每一个8位数据。DMA传输模式可以实现数据在一个时钟周期内连续传输,从而满足了“必须在一个周期里面发送全部数据”的要求。注意,在使用DMA传输模式时,需要根据SPI的时序要求配置合适的DMA通道、传输模式和传输方向等参数,以保证数据传输的正确性。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![apk](https://img-home.csdnimg.cn/images/20210720083646.png)