在线时间50 小时
UID263044
注册时间2011-2-16
NXP金币0
TA的每日心情 | 开心 2018-9-14 09:26 |
---|
签到天数: 2 天 连续签到: 1 天 [LV.1]初来乍到
高级会员

- 积分
- 952
- 最后登录
- 2021-1-4
|
看了AN4419,我就试了一下,成功了,但是还是有些不明白,和大家讨论一下
上程序:
////////////////////////////////////////////////////////////////////////////////
//
//note: use pit0,1 channel DMA and pta16 to generate a clock with 50% dety
// and the frequency is PIT0 counter's frequency/2
// please refer to AN4419
////////////////////////////////////////////////////////////////////////////////
void dmaPortClockOutputInitialization(void)
{
volatile uint32 *tempptr;
//gpio
SIM_SCGC5 |= SIM_SCGC5_PORTA_MASK;
PORTA_PCR16 = (PORT_PCR_MUX(1)
|PORT_PCR_IRQC(0x3));//generate DMA Request on either edge???
GPIOA_PDDR|=GPIO_PDDR_PDD(GPIO_PIN(16));
GPIOA_PTOR = 0x00010000; //????????????-note must be added for generate the first DMA request
//pit3
SIM_SCGC6 |= SIM_SCGC6_PIT_MASK; // turn on PIT cloccks
PIT_MCR = 1; // reset MDIS -> enable the module
PIT_LDVAL0 = 1777;
PIT_TFLG0 = PIT_TFLG_TIF_MASK; //clear TIF flag
PIT_TCTRL0 |= PIT_TCTRL_TEN_MASK; // start the timer
//DMA
SIM_SCGC6 |= SIM_SCGC6_DMAMUX_MASK;//DMA Mux Clock Gate Control
DMAMUX_CHCFG0 = DMAMUX_CHCFG_SOURCE(49); // PORTA use dma channel 0
DMAMUX_CHCFG0 |= DMAMUX_CHCFG_ENBL_MASK//DMA Channel Enable
|DMAMUX_CHCFG_TRIG_MASK; //Enables the periodic trigger capability
//for the triggered DMA channel
//using pit3
Dma_Source_WORD1[0]= 0x00010000; //16pin toggle
Dma_Source_WORD1[1]= 0x00000957;// 1kHz duty 50% PIT_LDVAL1
Dma_Source_WORD1[2]= 0x00000957;
tempptr = &Dma_Source_WORD1[0];
DMA_SADDR_REG(DMA_BASE_PTR,DMA_CHANNEL_0) = (uint32_t)tempptr;
DMA_DADDR_REG(DMA_BASE_PTR,DMA_CHANNEL_0) = 0x400Ff00C; //ADDRESS of PTD_PTOR
DMA_NBYTES_MLNO_REG(DMA_BASE_PTR,DMA_CHANNEL_0) = 4;//Minor Byte Transfer Count
DMA_ATTR_REG(DMA_BASE_PTR,DMA_CHANNEL_0) = DMA_ATTR_SSIZE(2) | DMA_ATTR_DSIZE(2);
DMA_SOFF_REG(DMA_BASE_PTR,DMA_CHANNEL_0) = 0;
DMA_DOFF_REG(DMA_BASE_PTR,DMA_CHANNEL_0) = 0;
DMA_SLAST_REG(DMA_BASE_PTR,DMA_CHANNEL_0) = 0;
DMA_CITER_ELINKNO_REG(DMA_BASE_PTR,DMA_CHANNEL_0) = DMA_CITER_ELINKNO_CITER(1);
DMA_DLAST_SGA_REG(DMA_BASE_PTR,DMA_CHANNEL_0) = 0;
DMA_BITER_ELINKNO_REG(DMA_BASE_PTR,DMA_CHANNEL_0) = DMA_BITER_ELINKNO_BITER(1);
DMA_CSR_REG(DMA_BASE_PTR,DMA_CHANNEL_0) = 0x0520;//0000-0101-0010-0000
DMA_ERQ|= 1;
GPIOA_PSOR = 0x00010000; //????????????-note must be added for generate the first DMA request
}
1. 4个PIT 周期触发DMA可以同时用几个吗?
2. 手册上的 Peripheral request 、DMA request、trigger的具体含义是什么?trigger 是PIT发的,DMA request 是IO口沿,那么外设请求是什么?我觉得是芯片的内部信号,不用设置,对吗?
|
|