金牌会员
- 积分
- 2596
- 威望
- 1326
- 贡献
- 836
- 兑换币
- 876
- 注册时间
- 2013-9-24
- 在线时间
- 217 小时
- 毕业学校
- 大黄
|
void DMA_TPM_Init(void)
{
SIM_SCGC7 |= SIM_SCGC7_DMA_MASK; //打开DMA时钟
SIM_SCGC6 |= SIM_SCGC6_DMAMUX_MASK; //打开DMA多路复用时钟
DMA_DSR_BCR_REG(DMA_BASE_PTR,0) |= DMA_DSR_BCR_DONE_MASK;
DMA_DCR_REG(DMA_BASE_PTR,0) = 0
| DMA_DCR_SSIZE(1)
| DMA_DCR_DSIZE(1)
// | DMA_DCR_SINC_MASK //传输后源地址增加(根据位宽)
| DMA_DCR_DINC_MASK //传输后目的地址增加(根据位宽)
| DMA_DCR_CS_MASK // 0为不停得传输,直到BCR为0;1为一次请求传输一次
//| DMA_DCR_START_MASK //软件触发传输
| DMA_DCR_ERQ_MASK //硬件触发传输(与上面START二选一)
| DMA_DCR_D_REQ_MASK //传输完成后硬件自动清ERQ
;
DMAMUX_CHCFG_REG(DMAMUX0_BASE_PTR,0) = DMAMUX_CHCFG_SOURCE(55); //设定传输源
//配置PTM
SIM_SOPT2 |= SIM_SOPT2_TPMSRC(1)
|SIM_SOPT2_PLLFLLSEL_MASK;
SIM_SCGC6 |= SIM_SCGC6_TPM1_MASK;
TPM_CNT_REG(TPM1_BASE_PTR) = 0;
TPM_MOD_REG(TPM1_BASE_PTR) = 33;
TPM_SC_REG(TPM1_BASE_PTR) = 0;
TPM_SC_REG(TPM1_BASE_PTR) = TPM_SC_TOF_MASK //清零计时器溢出标志位
|TPM_SC_DMA_MASK //使能溢出传输DMA
//|TPM_SC_TOIE_MASK //使能TOF中断
//|TPM_SC_CMOD(1) //设置计数器模式,并开始TPM计数
|TPM_SC_PS(0);
}
void DMA_TPM_Transfer(uint8* TBuff, uint8* RBuff)
{
DMA_DSR_BCR_REG(DMA_BASE_PTR,0) |= DMA_DSR_BCR_DONE_MASK;
DMA_DSR_BCR_REG(DMA_BASE_PTR,0) = DMA_DSR_BCR_BCR(73); //传输数目
DMA_SAR_REG(DMA_BASE_PTR,0) = (uint32) TBuff; // 源地址
DMA_DAR_REG(DMA_BASE_PTR,0) = (uint32) RBuff; // 目的地址
TPM_CNT_REG(TPM1_BASE_PTR) = 0; //计数器清零
TPM_SC_REG(TPM1_BASE_PTR) |= TPM_SC_TOF_MASK; //清零计时器溢出标志位
DMA_DCR_REG(DMA_BASE_PTR,0) |= DMA_DCR_ERQ_MASK;
DMAMUX_CHCFG_REG(DMAMUX0_BASE_PTR,0) |= DMAMUX_CHCFG_ENBL_MASK; //开始DMA
TPM_SC_REG(TPM1_BASE_PTR) |= TPM_SC_CMOD(1); //设置计数器模式,并开始TPM计数
}
|
|