OpenEdv-开源电子网

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

warning:integer conversion resulted in truncation

[复制链接]

18

主题

53

帖子

0

精华

初级会员

Rank: 2

积分
147
金钱
147
注册时间
2013-3-26
在线时间
0 小时
发表于 2013-10-11 00:32:50 | 显示全部楼层 |阅读模式
uint8_t DMADataBuffer[200]; //DMA数据缓存 DMA每次传送一行数据
//0x400ff052时PORTB PDIR 16-23位 的寄存器地址  移植时 需要修改 具体参看K10英文DATASHEET 
DMA_Init(1,51,(uint32_t)0x400ff052,(uint32_t)DMADataBuffer,1,0,0,1,-200,1,200);
//********************************************************************************
//函数名:DMA_Init
//参  数:ch   代表通道,0~15
//     touch   引起dma请求的触发源 2~63见参考手册85页
//        sa   源地址;da 目的地地址;
//        len  传输多少的字节数
//                 soff  源地址传一次地址偏移量,0代表源地址不变,1代表源地址每次加1
//                 slen  传输完成后源地址指针返回
//                 doff  目标地址传输一次地址偏移量,0代表目标地址不变,1代表目标地址每次加1
//       dlen  传输完成后目标指针返回
//       mode   dma工作模式选择,0代表dma软件启动传输;1表示通道触发传输;2表示pit周期性触发此时ch取值0~3
//    counter   小的循环次数,最多255次(因变量定义问题)
//   默认配置每次移动1字节,不设置优先级 ,主循环传输完成后产生中断
//   注意:在使用地址时加强制转换,一次传输8位,当counter=1时len可以>1,如果counter>1则len只能等于1,目前测试其它不稳定
//目前此函数可以进行数组到数组的传递,数到数组的传递,固定地址到变化地址的传递等,只要合理的配置地址指针就可以实现        
//  目前不能进行pit周期性触发
//日期:2012年2月21日
////////////////////////////////////////////
void DMA_Init(uint8_t ch,uint8_t touch,uint32_t sa,uint32_t da,uint32_t len,uint8_t soff,int8_t slen,uint8_t doff,int8_t dlen,uint8_t mode,uint32_t counter)
{
    SIM->SCGC7|=SIM_SCGC7_DMA_MASK;//开启DMA模块时钟,见参考手册272页
        DMA0->TCD[ch].NBYTES_MLNO=DMA_NBYTES_MLNO_NBYTES(len);//配置数据传输的多少字节,见手册447页
        DMA0->TCD[ch].SADDR=DMA_SADDR_SADDR(sa);   //设置源地址, 见参考手册445页
        DMA0->TCD[ch].SOFF=DMA_SOFF_SOFF(soff);  //配置通道的地址偏移量为每次加1个地址           见参考手册446页
        DMA0->TCD[ch].ATTR=(DMA_ATTR_SMOD(0)|DMA_ATTR_SSIZE(0x0)|DMA_ATTR_DMOD(0)|DMA_ATTR_DSIZE(0x0));//配置通道的属性一次8位         见参考手册446页
        DMA0->TCD[ch].SLAST=DMA_SLAST_SLAST(slen);//设置数据完成后指针不返回,见参考手册450页
        DMA0->TCD[ch].DADDR=DMA_DADDR_DADDR(da) ;   //设置目的地址,见参考手册450页
        DMA0->TCD[ch].DOFF=DMA_DOFF_DOFF(doff);  //目标地址每次传输偏移量,见参考手册451页
        DMA0->TCD[ch].DLAST_SGA=DMA_DLAST_SGA_DLASTSGA(dlen);//完毕后目标地址不返回,见参考手册453页
        DMA0->TCD[ch].CSR|=(DMA_CSR_INTMAJOR_MASK|DMA_CSR_DREQ_MASK);          //见参考手册455页
        switch(ch)
        {
          case 0: NVIC_EnableIRQ(DMA0_IRQn);break; //开启中断标号
          case 1: NVIC_EnableIRQ(DMA1_IRQn);break; //开启中断标号
          case 2: NVIC_EnableIRQ(DMA2_IRQn);break; //开启中断标号
          case 3: NVIC_EnableIRQ(DMA3_IRQn);break; //开启中断标号
          case 4: NVIC_EnableIRQ(DMA4_IRQn);break; //开启中断标号
          case 5: NVIC_EnableIRQ(DMA5_IRQn);break; //开启中断标号
          case 6: NVIC_EnableIRQ(DMA6_IRQn);break; //开启中断标号
          case 7: NVIC_EnableIRQ(DMA7_IRQn);break; //开启中断标号
           /*请根据上述方式自己加到15*/
        }
        DMA0->TCD[ch].CITER_ELINKNO=DMA_CITER_ELINKNO_CITER(counter); //见参考手册452页
        DMA0->TCD[ch].BITER_ELINKNO=DMA_BITER_ELINKNO_BITER(counter);//配置主循环为1次,见手册457页
        if(mode==0) 
           {  }
        if(mode==1) 
         {
                   //通道触发,没有周期性触发的功能
                DMA0->SERQ|=DMA_SERQ_SERQ(ch);//开启对应通道ch使能,见参考手册433页
                SIM->SCGC6|=SIM_SCGC6_DMAMUX_MASK ;         //开启DMAMUX模块时钟,见参考手册271页
                DMAMUX->CHCFG[ch]|=DMAMUX_CHCFG_SOURCE(touch) ;        //设置ch通道触发源,见参考手册395页
                DMAMUX->CHCFG[ch]|=(DMAMUX_CHCFG_ENBL_MASK); // 使能DMA-ch通道,见参考手册395页
         }
        if(mode==2)
         {
             //通道触发,带有周期性触发的功能  (此功能没有实现,原因不明)
                 DMA0->SERQ|=DMA_SERQ_SERQ(ch);//开启对应通道ch使能,见参考手册433页
                SIM->SCGC6|=SIM_SCGC6_DMAMUX_MASK ;          //开启DMAMUX模块时钟,见参考手册271页
                DMAMUX->CHCFG[ch]|=(DMAMUX_CHCFG_ENBL_MASK|DMAMUX_CHCFG_TRIG_SHIFT|DMAMUX_CHCFG_SOURCE(touch)); //使能DMA-ch通道及pit周期性触发,见参考手册395页
         }
}
编译后会出现integer conversion resulted in truncation这个warning,在此处DMA_Init(1,51,(uint32_t)0x400ff052,(uint32_t)DMADataBuffer,1,0,0,1,-200,1,200);求解答。    
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2013-10-11 10:51:02 | 显示全部楼层
某个参数不匹配...
把-200,改为200试试。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

74

主题

293

帖子

0

精华

高级会员

Rank: 4

积分
628
金钱
628
注册时间
2014-1-8
在线时间
7 小时
发表于 2014-5-14 10:07:07 | 显示全部楼层
回复【2楼】正点原子:
---------------------------------
原子 个这个警告不管应该不会出错吧
回复 支持 反对

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165540
金钱
165540
注册时间
2010-12-1
在线时间
2117 小时
发表于 2014-5-15 00:19:28 | 显示全部楼层
回复【3楼】MTFQ:
---------------------------------
你这是类型不匹配,这个DMA_Init,你看看参数范围,你怎么搞了个负数进去。。。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-7-8 04:43

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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