打印

2440的SPI通过DMA接收AD7766数据

[复制链接]
2347|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
arm2009wzm|  楼主 | 2013-6-25 16:04 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
spi, DMA, AD, RS, pc
S3C2440用SPI的查询方式已经接收到AD7766的数据,因为SPI一次只接收8位,而AD7766为24位AD,所以分3次读数,现在要把它改成SPI通过DMA(暂时用查询)来连续读取三次数据到RAM中,但不知为什么,在RAM中一直没有AD数据。
现将程序的设置如下,各位帮忙指点一下:

//*************************************************************************************************
// SPI接口初始化
void SPI_Init()
{
     rSPPRE1  = 0x4;           // 设置波特率预分频器值N,BaudRate = PCLK/2/(N+1)
     rSPCON1 &= ~0x66;    // CPOL=0,CPHA=0,方式1传输 (格式A,极性为正)
     rSPCON1 |= 0x59;       // 用0x59或者0x41好像没有什么差别
}
//*************************************************************************************************
// DMA通道3用于和SPI1通讯,接口初始化
void DMA_Init()
{
     rDISRC3  = 0x59000034;     // DMA 初始源地址为SPI1的接收寄存器 rSPRDAT1
     rDISRCC3 = 0x3;                  // 源在外设总线APB上,地址固定
     rDIDST3  = 0x33000000;     // 初始目标地址
     rDIDSTC3 = 0x0;                  // TC=0时中断,目标在系统总线AHB上,地址增加
     rDCON3   = 0x82800003;     // 握手、同步到APB、中断、硬件源SPI1、自动重加载、3字节
}
//*************************************************************************************************
// ADC 调试,使用DMA方式通过SPI读取24位AD
void ADC_Ts()
{
     while(1)
     {
           while ((rGPFDAT & 0x1) == 0x00);     // READ低等待
           while ((rGPFDAT & 0x1) == 0x01);     // READ高等待
           rSPCON1 |= 0x1;                               // SPI 的 TAGD=1,在接收数据时先自动发送杂数据
           rSPTDAT1 = 0xff;                               // 输出接收第一个字节的时钟,此行没有好像没关系
           rDMASKTRIG3 = 0x2;                         // DMASKTRIGn(ON_OFF) = 1: ON,打开DMA通道
           while ((rDSTAT3 & 0xfffff) !=0);          // 判断DMA的计数是否为0,不是则等待
           rSPCON1 &= ~0x1;                           // SPI不自动发送杂数据
           rDMASKTRIG3 = 0x4;                        // 停止DMA
           Delay(1000);                                     // 设置断点,观察数据
    }
}

//**************************************************************************************************
// 用示波器监视SPI1的SCK引脚,执行上面的调试程序时,发现3个8位的时钟脉冲,观看RAM区,SPRDAT1也有数据变化,通过
// 和SPI查询方式读数比较,此时SPRDAT1(0x59000034)数据也正确。
// 但是不知为什么,DMA的目标地址0x33000000中就是没有数据变化,也就是说DMA的源地址数据就是传输不到目标地址中。

相关帖子

沙发
arm2009wzm|  楼主 | 2013-7-1 09:34 | 只看该作者
有没有知道的前辈帮忙回答一下啊?

使用特权

评论回复
板凳
airwill| | 2013-7-2 13:03 | 只看该作者
这个芯片没有用过.
数据不传输, 想必是设置不对吧
是不是有允许位, 或者触发没有设置好呢

使用特权

评论回复
地板
arm2009wzm|  楼主 | 2013-7-8 09:12 | 只看该作者
已经解决了。
主要是数据Cache和DMA发生了内存冲突,只要关闭DMA所使用的RAM对应的数据Cache就可以正常收到数据了

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

29

帖子

0

粉丝