shouzhou 发表于 2015-4-19 09:53:19

有用超核的朋友吗?DMA配置串口到内存怎么都不对


刚开始学习 用的朝核2.5功能:将串口2接收数据存放到内存数组中,在WHILE中不停打印出这个数组的值 发现怎么都不对 代码如下:
DMA初始化:
/* DMA 串口接收 配置 */
static void UART_DMARevInit(uint32_t uartInstnace, uint8_t dmaChl, uint8_t * rxBuf)
{
    DMA_InitTypeDef DMA_InitStruct1 = {0};
    DMA_InitStruct1.chl = dmaChl;
    DMA_InitStruct1.chlTriggerSource = UART_RevDMATriggerSourceTable;
    DMA_InitStruct1.triggerSourceMode = kDMA_TriggerSource_Normal;
    DMA_InitStruct1.minorLoopByteCnt =16;
    DMA_InitStruct1.majorLoopCnt = 1;

    DMA_InitStruct1.sAddr = (uint32_t)&UART2->D;
    DMA_InitStruct1.sLastAddrAdj = 0;
    DMA_InitStruct1.sAddrOffset = 0;
    DMA_InitStruct1.sDataWidth = kDMA_DataWidthBit_8;
    DMA_InitStruct1.sMod = kDMA_ModuloDisable;

    DMA_InitStruct1.dAddr = (uint32_t)rxBuf;
    DMA_InitStruct1.dLastAddrAdj =-16;
    DMA_InitStruct1.dAddrOffset = 1;
    DMA_InitStruct1.dDataWidth = kDMA_DataWidthBit_8;
    DMA_InitStruct1.dMod = kDMA_ModuloDisable;
    DMA_Init(&DMA_InitStruct1);
    /* 完成 Major Loop 后不停止 Request 继续等待DMA硬件触发源触发 */
   // DMA_EnableAutoDisableRequest(dmaChl, false);
}

main中 对串口初始化:
UART_QuickInit(UART2_RX_PD02_TX_PD03, 115200);
/* 配置DMA 打开UART_Rx_DMA功能 */
    UART_ITDMAConfig(HW_UART2, kUART_DMA_Rx, true);
    UART_DMARevInit(HW_UART2, DMA_REV_CH, UART_Buffer);

DMA_EnableRequest(DMA_REV_CH);
    while(1)
    {
       unsigned char i;
      printf("%d =%x\r\n",i,UART_Buffer);
      i++;
      if(i==16) i=0;
      DelayMs(500);
    }


输出的数据 :不停的是我接收数组的最后一个值 0x55 (0XAA 0X01 .....最后肯定是0x55) 这样8个字节 一般一次发两组数据 共16个字节。
大家帮我看看 哪里配置的不对 ,实在搞不出来了。

地主阿山 发表于 2015-4-21 10:57:14

超核有文档说明这些函数或程序咋用不?

justdomyself 发表于 2015-4-21 11:09:02

超核是个啥东西求科普

ccrt 发表于 2015-4-21 11:47:00

justdomyself 发表于 2015-4-21 11:09
超核是个啥东西求科普

百度搜一下不就知道了

justdomyself 发表于 2015-4-21 12:09:31

超核是波兰科学家M.丹尼什和J.普涅夫斯基在1952年从暴露在宇宙线中的核乳胶里发现的。超核的发现,不仅证明了核由中子和质子组成,对于研究核子和超子之间的相互作用,以及超子进入原子核中后对其运动形态的影响都有重要作用。
中文名超核
类    别含有超子(见奇异粒子)的原子核
发现时间1952年
发现人科学家M.丹尼什和J.普涅夫斯基
含有超子(见奇异粒子)的原子核。最早发现的超核是含有一个Λ超子的Λ

超核,它是波兰科学家M.丹尼什和J.普涅夫斯基在1952年从暴露在宇宙线中的核乳胶里发现的。由于Λ超子是最轻的奇异重子,而强相互作用要求奇异数和重子数守恒,因此Λ超子在核物质中相对于强相互作用是稳定的,只能产生弱相互作用衰变。这使得Λ超核和Λ超子有几乎相同的寿命(大约为2×10秒)。因而在实验上比较容易观察到Λ超核。到目前为止,人们已经发现了几十种Λ超核,例如H、H、He、H、Be、C等。另外,还发现了两种含有两个Λ超子的双Λ超核(掆He和抍Be)。除了Λ超核外,还发现了∑超核。理论上还预言有可能发现Ξ超核,但实验上至今没有观察到。
产生超核的方法主要是通过奇异交换反应:
由于在这些反应中,K介子带的奇异数转移到Λ或∑超子上,因此称其为奇异交换反应。通过这些反应,实验物理学家已经测量到一系列相当清晰的超核激发能谱,为开展超核能谱学的理论研究创造了良好的条件。
应当注意,由于超核是一个由三类粒子(中子、质子和超子)组

成的多体系统,它比原子核有更多的激发方式。例如,在Λ超核和双 Λ超核中可能有五个粒子或六个粒子空间全对称的态,即所谓超对称态。这是普通原子核所没有的新型激发态。因此研究超核的运动规律具有更特殊的意义。

ccrt 发表于 2015-4-21 18:14:12

justdomyself 发表于 2015-4-21 12:09
超核是波兰科学家M.丹尼什和J.普涅夫斯基在1952年从暴露在宇宙线中的核乳胶里发现的。超核的发现,不仅证明 ...

你搜超核电子
呵呵
不过山外又该忙活了

shouzhou 发表于 2015-4-23 22:43:28

解决方法:
DMA_InitStruct1.minorLoopByteCnt =16;->DMA_InitStruct1.minorLoopByteCnt =1;
    DMA_InitStruct1.majorLoopCnt = 1;--->DMA_InitStruct1.majorLoopCnt = 16;
换成这样 收到的数据就OK了 但是心里还是没底的 感觉怪怪的

FSL_TICS_Robin 发表于 2015-4-29 09:20:31

shouzhou 发表于 2015-4-23 22:43
解决方法:
DMA_InitStruct1.minorLoopByteCnt =16;->DMA_InitStruct1.minorLoopByteCnt =1;
   ...

关于DMA主循环、次循环的相关概念,你可以看一下论坛里的帖子:【Kinetis内部培训资料】eDMA模块

至于超核库具体怎么使用,还是得看他们得手册呢。

FSL_TICS_Robin 发表于 2015-5-13 16:32:27

非常感谢你关于Kinetis的技术问题。如果你没有其他问题,我们将此帖默认为已解决.
页: [1]
查看完整版本: 有用超核的朋友吗?DMA配置串口到内存怎么都不对