OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3631|回复: 5

使用DMA有要注意什麼嗎...

[复制链接]

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
发表于 2017-1-24 11:04:22 | 显示全部楼层 |阅读模式
1金钱
用DMA SPI傳輸19200*16bit到另一個STM32

使能傳輸完成中斷,在中斷中拉GPIOx=1
在開始傳輸的時候GPIOx=0,所以低寬度就是一次DMA SPI的傳輸時間
只是我是用21MHz的 我用示波器量到低寬度=21.62ms ,
如果用計算的時間兜不起來這會是什麼原因??

void DMA1_SPI2_RX(void)
{
RCC->AHB1ENR |= 1<<21; //enable DMA1 Clk
DMA1_Stream3->PAR = (u32)&SPI2->DR;                                    //Peripheral address
DMA1_Stream3->M0AR =(u32)&SPI_raw_data;        //Memory address
DMA1_Stream3->NDTR = 160*120;                        //number of data
DMA1_Stream3->CR |= 0<<6;                                //Peripheral to Memory
DMA1_Stream3->CR |= 0<<8;                                //disable Circular mode
DMA1_Stream3->CR |= 0<<9;                                //DISABLE Peripheral increment mode
DMA1_Stream3->CR |= 1<<10;                                //ENABLE Memory increment mode
DMA1_Stream3->CR |= 1<<11;                                //Peripheral data size 16bit  
DMA1_Stream3->CR |= 1<<13;                                //Memory data size 16bit
DMA1_Stream3->CR |= 2<<16;                                //Priority level 2
DMA1_Stream3->CR |= 0<<21;                                //Peripheral burst transfer configuration
DMA1_Stream3->CR |= 0<<23;                                //Memory burst transfer configuration
DMA1_Stream3->CR |= 0<<25;                                //selection Channel0       
DMA1_Stream3->CR |= 1<<4;                                //Transfer complete interrupt enable
DMA1_Stream3->CR |= 1<<0;
MY_NVIC_Init(0,2,DMA1_Stream3_IRQn ,2);
}

void DMA1_Stream3_IRQHandler(void)
{       
        TP2=1;
        DMA1->LIFCR |= 3<<26; // clear flag        
}


void DMA1_SPI2_RX_Enable(void)
{
        DMA1_Stream3->CR |= 1<<0;       
        TP2=0;
}


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
 楼主| 发表于 2017-1-24 11:07:34 | 显示全部楼层
補充一下...
發送端的STM32會讀取TP2
當TP2==0的時候才開始發送數據
回复

使用道具 举报

54

主题

372

帖子

0

精华

高级会员

Rank: 4

积分
979
金钱
979
注册时间
2016-6-15
在线时间
474 小时
发表于 2017-1-24 11:11:49 | 显示全部楼层
使用DMA如果不能正常通讯首先排除基本寄存器设置外最大问题就是DMA源与目标地址和DMA传输方向,一般仿真时可以查看DMA的寄存器外设或存储器地址值是否合法.
回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
 楼主| 发表于 2017-1-24 11:39:16 | 显示全部楼层
可以正常通訊的...只是對傳輸時間有疑問...

回复

使用道具 举报

60

主题

409

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2814
金钱
2814
注册时间
2012-10-17
在线时间
653 小时
 楼主| 发表于 2017-1-24 14:48:11 | 显示全部楼层
勾錯寬度了...在發送端拉GPIO發送寬度是對的...14.62ms
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2017-1-24 20:37:02 | 显示全部楼层
没明白你的问题
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-20 07:26

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表