📄 dma.c
字号:
/*********************************************************************************************
* File: main.c
* Author: embest
* Desc: c main entry
* History:
*********************************************************************************************/
/*------------------------------------------------------------------------------------------*/
/* includes files */
/*------------------------------------------------------------------------------------------*/
#include "2410lib.h"
#include "head.h"
INT8U isDone;
void __irq Uart0_TxDmaDone(void)
{
rDMASKTRIG0=0x0; // Stop Dma0
isDone=0;
rINTMSK |= BIT_DMA0;
ClearPending(BIT_DMA0);
}
init_uart()
{
/*********** UART0 Tx test with DMA0 ***********/
INT8U uart0TxStr[] = {"ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890->UART0 Tx Test by DMA0 is good!!!!\r\n"};
uart_printf("\n[Uart channel 0 DMA0 Tx Test]\n");
isDone=1;
rULCON0 = (0<<6)|(0<<3)|(0<<2)|(3); // Normal,No parity,One stop bit, 8bit
rUCON0 &= 0x400; // For the PCLK <-> UCLK fuction
rUCON0 |= (1<<9)|(1<<8)|(0<<7)|(0<<6)|(0<<5)|(0<<4)|(2<<2)|(0);
//Clock,Tx:Def,Rx:Def,Rx timeout:x,Rx error int:x,Loop-back:x,Send break:x,Tx:dma0,Rx:x
/***DMA0 init***/
rDISRC0 = (INT32U)uart0TxStr; // Start address
rDISRCC0= (0<<1)|(0); // AHB,Increment
rDIDST0 = (INT32U)UTXH0; // Memory buffer Address
rDIDSTC0= (1<<1)|(1); // APB,Fixed
rDCON0 = (0x80000000)|(0<<30)|(1<<29)|(0<<28)|(0<<27)|(1<<24)|(1<<23)|(1<<22)|(0<<20)|strlen((char*)uart0TxStr);
//handshake, sync PCLK, TC int, single tx, single service, Uart0, H/W request,auto-reload off, Byte size Tx, Tx count value
rINTMSK =~(BIT_DMA0);
rDMASKTRIG0 = (0<<2)|(1<<1)|(0); //no-stop, DMA0 channel on, no-SW trigger
pISR_DMA0 =(INT32U)Uart0_TxDmaDone;
}
void uart0_dma_test()
{
init_uart();
while(isDone);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -