TI中文支持网
TI专业的中文技术问题搜集分享网站

CC2640R2F使用UART同时使用SPI时UART不工作

工程师们你们好,

请问一下,我有一个UART线程来进行UART的读写操作,之后我初始化了一个SPI,增加这个SPI之后,UART的线程无法工作,在CS调试模式下无法标记断点无法进入,但是SPI是可以发送出数据的,在另一块板子上可以收到数据,UART波特率为921600,SPI为1000000,这两个之间会有影响吗?SPI是master模式,这两个同时使用会有问题吗?

GuppyCat:

回复 Kevin Qiu1:

#include <stdint.h>
#include <stddef.h>
#include <SPI_Device.h>#include "ti/drivers/SPI.h"
#include "ti/drivers/spi/***.h"
#include "ti/drivers/dma/UDMACC26XX.h"#include "uartdebug.h"#include "board.h"
#include "string.h"
#define SPI_DATA_LEN 20SPI_Params SPI_DeviceParam;
SPI_Handle SPI_DeviceHandle;
SPI_Transaction SPI_DeviceTransAct;
char SpiRxBuf[SPI_DATA_LEN];
char SpiTxBuf[SPI_DATA_LEN];// 中断
void SPI_DeviceCallback (SPI_Handle handle, SPI_Transaction *transaction)
{UART_Handle uart1 = GetUartHandle();// Start another transferSPI_transfer(handle, transaction);UART_write(uart1, transaction->rxBuf, 20);
}// 初始化
void SPI_DeviceInit(void)
{SPI_init();SPI_DeviceTransAct.count = SPI_DATA_LEN;SPI_DeviceTransAct.rxBuf = SpiRxBuf;SPI_DeviceTransAct.txBuf = SpiTxBuf;SPI_Params_init(&SPI_DeviceParam);SPI_DeviceParam.transferMode = SPI_MODE_CALLBACK;SPI_DeviceParam.mode = SPI_MASTER;SPI_DeviceParam.frameFormat = SPI_POL1_PHA1;SPI_DeviceParam.transferCallbackFxn = SPI_DeviceCallback;SPI_DeviceParam.bitRate = 1000000;SPI_DeviceHandle = SPI_open(0, &SPI_DeviceParam);if ( 0 > SPI_control(SPI_DeviceHandle, ***, NULL) ){while(1);}SPI_transfer(SPI_DeviceHandle, &SPI_DeviceTransAct);
}// 发送
void SPI_DeviceSendData(void)
{strncpy(SpiTxBuf, "01234567890123456789", SPI_DATA_LEN);SPI_transfer(SPI_DeviceHandle, &SPI_DeviceTransAct);
}

您好,以上是我的代码,当做主机发送20个字节,片选引脚配置的是IO11,在从机模式下能够工作,UART也是正常的,主机修改过后则UART不工作,

/* Kick off application - Priority 1 */SimpleCentral_createTask();//Uart initUartThread_createTask();SPI_DeviceInit();

这是main中初始化部分,麻烦您看下,谢谢!

GuppyCat:

回复 GuppyCat:

这是我自己给写死了,搞定了!

/*! * @brief Function to perform SPI transactions * * If the SPI is in #SPI_MASTER mode, it will immediately start the * transaction. If the SPI is in #SPI_SLAVE mode, it prepares the driver for * a transaction with a SPI master device. The device will then wait until * the master begins the transfer. * * In #SPI_MODE_BLOCKING, #SPI_transfer() will block task execution until the * transaction has completed or a timeout has occurred. * * In #SPI_MODE_CALLBACK, %SPI_transfer() does not block task execution, but * calls a #SPI_CallbackFxn once the transfer has finished. This makes * %SPI_tranfer() safe to be used within a Task, software or hardware * interrupt context. If queued transactions are supported SPI_Transfer may * be called multiple times to queue multiple transactions. If the driver does * not support this functionality additional calls will return false. Refer to * device specific SPI driver documentation for support information. * * From calling #SPI_transfer() until transfer completion, the #SPI_Transaction * structure must stay persistent and must not be altered by application code. * It is also forbidden to modify the content of the #SPI_Transaction.txBuf * during a transaction, even though the physical transfer might not have * started yet. Doing this can result in data corruption. This is especially * important for slave operations where SPI_transfer() might be called a long * time before the actual data transfer begins. * * @param handle A #SPI_Handle * * @param transaction A pointer to a #SPI_Transaction. All of the fields within * transaction except #SPI_Transaction.count and * #SPI_Transaction.status are WO (write-only) unless * otherwise noted in the driver implementations. If a * transaction timeout has occurred, #SPI_Transaction.count * will contain the number of frames that were transferred. * Neither is it allowed to modify the transaction object nor * the content of #SPI_Transaction.txBuf until the transfer * has completed. * * @return @p true if started successfully; else @p false * * @sa #SPI_open * @sa #SPI_transferCancel */extern bool SPI_transfer(SPI_Handle handle, SPI_Transaction *transaction);

赞(0)
未经允许不得转载:TI中文支持网 » CC2640R2F使用UART同时使用SPI时UART不工作
分享到: 更多 (0)