求助坛友,BF533 UART DMA向外发数不成功,已经困死几个礼拜了
刚开始学DSP,用的是ADI的blackfin533,感觉资料好少啊,这两个礼拜就一直盯着533的datasheet看,晕死!盼坛中高手帮下小弟,拜谢!第一个图是程序,第二个图是寄存器
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_591874QE9MTI.jpg
BF533的串口程序 (原文件名:2010-10-21 15.32.21.jpg)
http://cache.amobbs.com/bbs_upload782111/files_34/ourdev_591875RGB3D4.jpg
寄存器的值 (原文件名:2010-10-21 15.33.14.jpg) 不明白!!!!!!!!!!!!!!! DMA貌似没有什么问题已经在运行没有报错,且当前DMA_CURR_COUNT 已经在传输第八个数据了。因此怀疑是你UART配置有问题,看看波特率或者其他地方是不是有问题。 回复【2楼】tomjark
dma貌似没有什么问题已经在运行没有报错,且当前dma_curr_count 已经在传输第八个数据了。因此怀疑是你uart配置有问题,看看波特率或者其他地方是不是有问题。
-----------------------------------------------------------------------
那几行串口的程序就是是设置波特率和开启串口时钟,波特率已经验证过了,因为用那几行程序试过一次发一个数(不用DMA,给THR中直接写数)。谢谢你的回复 自己顶一下,继续等大虾 上个我做过的UART发送指令控制外部设备的代码给你参考看看。程序是基于BF548的不过改改就能用了。
/****************************************************************************
* 名称 : Init_Port
* 功能 : 初始化UARTx接口
****************************************************************************/
void Init_Port(void)
{
//UART3 function
*pPORTB_FER |= Px6|Px7;
//UART transmit mode
//set UART3CTS to high level
*pPORTB_FER &= ~Px3;
*pPORTB_DIR_SET |= Px3;
*pPORTB |= Px3;
//set UART3RTS to low level
*pPORTB_FER &= ~Px2;
*pPORTB_DIR_SET |= Px2;
*pPORTB &= ~Px2;
}
/****************************************************************************
* 名称 : Init_UART3
* 功能 : 初始化UARTx接口
****************************************************************************/
void Init_UART3(void)
{
*pUART3_GCTL =UCEN;
*pUART3_LCR = 0x03;
*pUART3_DLL = BAUD_RATE_1000000;
*pUART3_DLH = (BAUD_RATE_1000000 >> 8);
}
/****************************************************************************
* 名称 : Init_DMA
* 功能 : 初始化DM
****************************************************************************/
void Init_DMA(void)
{
//peripheral map register
*pDMA21_PERIPHERAL_MAP = 0xF000;
// DMA Config: Enable DMA | 8-bit
*pDMA21_CONFIG = DI_EN | WDSIZE_8 | SYNC;
// start address of the DMA
*pDMA21_START_ADDR = uartSendBuffer;
//data count of transfers
*pDMA21_X_COUNT = 18;
//The modifier is set to 1 because of the 8 bit transfers
*pDMA21_X_MODIFY = 1;
ssync();
}
/****************************************************************************
* 名称 : EnableUART3_DMA
* 功能 : 使能UART3_DMA
****************************************************************************/
void EnableUART3_DMA(void)
{
// enable transfers
*pDMA21_CONFIG |= 0x1;
ssync();
*pUART3_IER_SET|= ETBEI;
ssync();
}
/****************************************************************************
* 名称 : EX_INTERRUPT_HANDLER
* 功能 : UART3中断函数
****************************************************************************/
EX_INTERRUPT_HANDLER(UART3_TxIsr)
{
*pDMA21_IRQ_STATUS |= DMA_DONE;
ssync();
//printf("uart_dma end !\n");
transmitted = 1;
}
页:
[1]