[原创] LPC1500体验 + (DAC-简单的波形输出)

dj狂人   2014-8-11 20:28 楼主
                折腾了一下午,总算是把 LPC1549 的DAC 调出来了,12位deAD,就一个通道。

                虽然手上有例程,原版是这样的:

int main(void)
{
    uint32_t *pulSrc_addr;
    uint32_t *pulDest_addr;
    uint32_t i;
    SystemCoreClockUpdate();

    GPIOInit();                                                         /* 时能GPIO时钟,关闭复位       */                                          

    GPIOSetDir(LED_PORT, LED1, 1);                                      /* 设置PI00.3成输出             */
    GPIOSetDir(LED_PORT, LED2, 1);                                      /* 设置PI00.4成输出             */
    GPIOSetBitValue(LED_PORT,LED1,LED_OFF);                             /* 关闭所有LED                  */
    GPIOSetBitValue(LED_PORT,LED2,LED_OFF);
#if DAC_DMA_ENABLE

                                                                        /* Initialize DMA               */
    DMA_Init();

    pulSrc_addr =  (uint32_t *)DMA_SRC;
    for ( i = 0; i < DAC_DMA_SIZE/4; i++ )
    {
        *pulSrc_addr++ = (i<<4) & 0xFFFFFFFF;
    }

    CHANNEL_DESCRIPTOR(DMAREQ_DAC)->Src = (uint32_t)(DMA_SRC + DAC_DMA_SIZE -4);
    CHANNEL_DESCRIPTOR(DMAREQ_DAC)->Dst = (uint32_t)(&LPC_DAC->VAL);
    CHANNEL_DESCRIPTOR(DMAREQ_DAC)->Link = (uint32_t)0x0;
    LPC_DMA_CH(DMAREQ_DAC)->CFG = CFG_PERIPHREQEN;
    LPC_DMA_CH(DMAREQ_DAC)->XFERCFG = XFERCFG_CNT(DAC_DMA_SIZE/(0x1<                     | XFERCFG_WIDTH(WIDTH32) | XFERCFG_CFGVALID;

                                                                        /* Enable DMA channels          */
    LPC_DMA->ENABLESET0 = 0x01<
                                                                        /* Initialize DAC               */
    DACDMAInit( 0x1 );
#else
    /*
     * Initialize DAC. DAC output increments based on the trigger, either timed or external, inside the DAC handler.
     */
#if TIMER_TRIG_ENABLED
    DACInit( 0x10 );                                                    /* 每次DAC产生中断的时间        */
#else
    /* if timer trigger is not enabled, parameter has no use. */
    DACInit( 0 );
#endif
    LPC_DAC->CTRL |= DAC_BIAS(0);                                       /* 配置DAC控制器                */
#endif   
    /*
     * 每次DAC转换完成会产生中断,在中断中增加DAC的转换值
     */
    while(1) {
        GPIOSetBitValue(LED_PORT,LED1,LED_ON);                          /* 打开的LED1                   */
        myDelay(1);                                                     /* 延时0.5s                     */

        GPIOSetBitValue(LED_PORT,LED1,LED_OFF);                         /* 关闭的LED1                   */
        myDelay(1);

        GPIOSetBitValue(LED_PORT,LED2,LED_ON);                          /* 打开的LED2                   */
        myDelay(1);

        GPIOSetBitValue(LED_PORT,LED2,LED_OFF);                         /* 关闭的LED2                   */
        myDelay(1);
    }
}

/*********************************************************************************************************
  End Of File
*********************************************************************************************************/



这个效果是怎么样的我也不知道,因为调不出来,最后实在是弄不下去了,开始自己改,然后然后然后就得了............

没用 DMA ,就单纯的DAC,做了个简单到爆的信号发生器,暂且算是吧

IMG_20140811_193432.jpg IMG_20140811_193555.jpg
IMG_20140811_194855.jpg IMG_20140811_194855.jpg
IMG_20140811_195019.jpg IMG_20140811_195152.jpg
IMG_20140811_195050.jpg IMG_20140811_195117.jpg


可以输出的最高频率是 7点多K,当然也不是7k以内的就可以任意输出...............哈哈  不要在意细节,呀

修改之后的程序是这样的
int main(void)
{
    uint32_t j=0,k=1;
    SystemCoreClockUpdate();

    DACInit( 0x01 );                                                    /* 每次DAC产生中断的时间        */       
        LPC_DAC->VAL = (0x2ff << 4) & 0x0000FFFF;

    while(1)
        {

                  LPC_DAC->VAL = (j << 4) & 0x0000FFFF;
                  
                  if(k==1)
                        j += 0xf;
                  else if(k==0)
                        j -= 0xf;
                       
                  if(j>0xfff)
                                k = 0;
                  if(j<=0)
                                k = 1;
    }
}




  • IMG_20140811_194634.jpg
  • IMG_20140811_194746.jpg

    DAC.zip (2014-8-11 20:28 上传)

    440.21 KB, 下载次数: 22

回复评论 (4)

不错 楼主继续加油 :)
加油!在电子行业默默贡献自己的力量!:)
点赞  2014-8-12 08:19
            
      又重新调试了下,最高频率是可以达到更高的,改变每次输出的 增/减 量 就可以,不过增/减 的量太大的话,波形就没那么细腻了



{L4@C8M9_NV@`_S8T(4CP2D.jpg
7T3I`1106GO4F[$HJU~L}OJ.jpg

点赞  2014-8-12 14:41
Y1UCT(9WNH2P4JCM9569.jpg {L4@C8M9_NV@`_S8T(4CP2D.jpg
0]2@K2OZPZ]N51ZMMVYW_[4.jpg
3_YNSL]}{6G3_Q]%AKZ{B.jpg

点赞  2014-8-12 14:42
学习了,支持下
点赞  2014-8-12 19:03
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复