查看: 6972|回复: 20

[原创] 以YL-KL26Z开发板制作会讲故事的书——3

[复制链接]
  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7124
    最后登录
    2023-4-20
    发表于 2015-11-22 22:46:56 | 显示全部楼层 |阅读模式
    程序代码
      经修改和调试,main.c的文件内容如下:
    /*******************Copyright (c)*******************
    **  Copyright ?2003~2009 Shenzhen uCdragon Technology Co.,Ltd. All Rights Reserved
    **
    **
    **      深圳市优龙科技有限公司所提供的所有服务内容旨在协助客户加速产品的研发进度,在服务过程中所提供
    **  的任何程序、文档、测试结果、方案、支持等资料和信息,都仅供参考,客户有权不使用或自行参考修改,本公司不
    **  提供任何的完整性、可靠性等保证,若在客户使用过程中因任何原因造成的特别的、偶然的或间接的损失,本公司不承担任何责任。
    **                     —深圳市优龙科技有限公司
    **
    **--------------File Info------------------------------
    ** File Name:               Main.c
    ** Last modified date:      
    ** Last version:            V1.0
    ** Description:             主函数文件
    **
    **-----------------------------------------------------
    **      后经天津理工大学李静修改为多段语音文件键控播放,并在不断完善优**      化中,以期有更强的功能并更加易于使用。
    **
    ********************************************************************/
    #include "includes.h"
    #include "fat.h"
    void myDelay(INT16U uiTime);
    extern uint16_t SectorsPerClust;
    extern unsigned char audio[];
    /************************* 全局变量与函数 **************************/
    unsigned int FIFO_in;        //读取缓冲区指针
    unsigned int FIFO_out;       //播放缓冲区指针
    unsigned char Buffer[2048];  //2k缓冲区
    int i;
    INT32U         size1,size2=0;
    #define AD_Sample_Num   65535
    #define Volume_Num   20
    unsigned int Volume=Volume_Num;
    /********************************************************************
    ** Function name:           myDelay()
    ** Descriptions:            延时函数
    ** input parameters:        none
    ** output parameters:       none
    ** Returned value:          none
    ** Created by:            
    ** Created date:            
    **-------------------------------------------------------------------** Modified by:            
    ** Modified date:           
    ********************************************************************/
    void myDelay(INT16U uiTime)
    {
        INT16U i,j;
        for(i = 0; i < uiTime; i++) {
          for(j = 0; j < 5000; j++);
        }
    }
    /********************************************************************
    ** Function name:           main
    ** Descriptions:
    **                          SPI0 CS0  PTC4
    **                          SPI0 SCK  PTC5
    **                          SPI0 MOSI PTC6
    **                          SPI0 MISO PTC7
    ** input parameters:        none
    ** output parameters:       none
    ** Returned value:          none
    ** Created by:            
    ** Created Date:            
    **-------------------------------------------------------------------** Modified by:
    ** Modified date:
    *******************************************************************/
    int  main (void)
    {
        INT8U flag,part;
             int i;
        int j=0;
              INT32U         cluster,size=0;
        struct        FileInfoStruct FileInfo;
        SystemCoreClockUpdate();                                            /* 时钟配置                     */
        uart0Init(9600,0,0,8,1);
            printf("SD_SPI Test Star...\n");
            gpioInit();                                                         /* 管脚初始化                   */
        Led5Set(1);        /* D5点亮 */
            dacInit();                                                          /* DAC  初始化                 */
            adcInit();
        pitInit();                                                          /* PIT  定时器初始化                 */
            spiInit(SPI0_BASE_PTR , Master);                                    /* SPI0 主机模式初始化           */
           
                    flag=SD_Init();
                    if(flag!=0)
                    {
                            printf("SD_Init...Fall!");
                            while(1);
                    }       
                    FAT_Init();
                    FAT_DisDir("\\");
                    while(1)
                    {
                    //   增添以按键来选择语音段播放功能
                    if(j==0)                cluster=FAT_OpenFile("\\1.wav",&FileInfo);
                    if(j==1)                cluster=FAT_OpenFile("\\2.wav",&FileInfo);
                    if(j==2)                cluster=FAT_OpenFile("\\3.wav",&FileInfo);
                    if(j==3)                cluster=FAT_OpenFile("\\4.wav",&FileInfo);
                    if(j==4)                cluster=FAT_OpenFile("\\5.wav",&FileInfo);
                    if(j==5)                cluster=FAT_OpenFile("\\6.wav",&FileInfo);
                                   
                    if(cluster==0 || FileInfo.Size == 0)
              {
                    printf("File open err!\n");
                    return 0;
              }
                   
        printf("File size is %d",FileInfo.Size);
             FIFO_out = 0;
        FIFO_in  = 0;
             NVIC_EnableIRQ(PIT_IRQn);                                          
        NVIC_SetPriority(PIT_IRQn,3);                                       
        __enable_irq();
            size1=FileInfo.Size;       
                   
                    while(size<FileInfo.Size)
                    {
                   
                            for(part=0;part<SectorsPerClust;part++)
                            {
                                    FAT_LoadPartCluster(cluster,part,(uint8_t *)(Buffer+FIFO_in));        //读一个扇区
                                    FIFO_in+=512;       
                                    if(FIFO_in==2048) FIFO_in=0;
                   
                    do
          {                             //计算缓冲区出入口距离
              i = FIFO_in - FIFO_out;
                                            if(i<0) i+=2048;   //小于0要加上2048,再比较。   
                     
          } while(i>1024);           //如果缓冲区接近溢出,先暂停等待。
                   
                      }   
                    cluster=FAT_NextCluster(cluster);  //下一个扇区
                    size=size+SectorsPerClust*512;
                    }
                    j++;
                    if(j>=6) j=0;
                    while((FGPIOD_PDIR & 1<<6) == 1<<6);
                    myDelay(500);
                    myDelay(500);
                    size=0;
                    size2=0;
              }
          
    }
    /********************************************************************
    ** Function name:           PIT_IRQHandler
    ** Descriptions:            PIT  8KHz
    ** input parameters:        none
    ** output parameters:       none
    ** Returned value:          none
    ** Created by:              
    ** Created date
    **-------------------------------------------------------------------
    ** Modified by:            
    ** Modified date:           
    ********************************************************************/
    void PIT_IRQHandler(void)
    {
            PIT_TFLG0 |= PIT_TFLG_TIF_MASK;                                    
            if(adcGetUint()<AD_Sample_Num/3)   
        // 根据ad采样大小 3个led灯显示音量大小程度
            {
                    Led5Set(1);
                    Led6Set(0);
                    Led7Set(0);
                   
            }
            else if(adcGetUint()<2*AD_Sample_Num/3)
            {
                    Led5Set(1);
                    Led6Set(1);
                    Led7Set(0);
           
            }
            else
            {
                    Led5Set(1);
                    Led6Set(1);
                    Led7Set(1);       
                   
            }       
            Volume=Volume_Num*adcGetUint()>>16;
            if(size2 < size1)        dacTrigger(Buffer[FIFO_out]/(Volume_Num-Volume));        //语音输出
            FIFO_out++;            //输出buffer下标+1
            size2++;
            if(FIFO_out>2047)      //达到最大值,重置下标   
            {
                    FIFO_out=0;
            }
    }
    /********************************************************************
      END FILE
    ********************************************************************/

    评分

    参与人数 1NXP金币 +20 收起 理由
    小七 + 20

    查看全部评分

    回复

    使用道具 举报

  • TA的每日心情
    难过
    2024-3-21 15:13
  • 签到天数: 41 天

    连续签到: 1 天

    [LV.5]常住居民I

    32

    主题

    1820

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    1785
    最后登录
    2024-3-21
    发表于 2015-11-22 23:53:04 | 显示全部楼层
    看一下,支持一个
    好多年没来了
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2018-11-4 09:17
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    8

    主题

    34

    帖子

    0

    注册会员

    Rank: 2

    积分
    156
    最后登录
    2019-7-5
    发表于 2015-11-23 00:07:47 | 显示全部楼层
    我复制了这段程序,但还是没有声音出来,请问是为什么?我用的是2G的SD卡,是不是一定要用4G
    以上的卡?
    哎...今天够累的,签到来了~
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2017-1-24 09:50
  • 签到天数: 2 天

    连续签到: 1 天

    [LV.1]初来乍到

    654

    主题

    3262

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    13211
    最后登录
    2019-1-27
    发表于 2015-11-23 08:47:36 | 显示全部楼层
    这个看起起来很不错哦,是不是类似市场上那种点读机?
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    27

    主题

    320

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    484
    最后登录
    2016-3-28
    发表于 2015-11-23 08:59:45 | 显示全部楼层
    谢谢分享,有空试试
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2021-12-10 16:14
  • 签到天数: 1442 天

    连续签到: 1 天

    [LV.10]以坛为家III

    17

    主题

    3862

    帖子

    0

    金牌会员

    Rank: 6Rank: 6

    积分
    8291
    最后登录
    2021-12-10
    发表于 2015-11-23 09:35:27 | 显示全部楼层
    很不错,感谢分享。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    开心
    2024-1-6 07:38
  • 签到天数: 736 天

    连续签到: 1 天

    [LV.9]以坛为家II

    21

    主题

    3486

    帖子

    6

    金牌会员

    Rank: 6Rank: 6

    积分
    5093
    最后登录
    2024-1-7
    发表于 2015-11-23 09:54:24 | 显示全部楼层
    谢谢分享,支持一下
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    9

    主题

    642

    帖子

    0

    高级会员

    Rank: 4

    积分
    748
    最后登录
    1970-1-1
    发表于 2015-11-23 10:21:08 | 显示全部楼层
    本帖最后由 安臣 于 2015-11-23 10:23 编辑

    感谢分享
    104930kli5jsmlssemljli.png
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7124
    最后登录
    2023-4-20
     楼主| 发表于 2015-11-23 11:16:25 | 显示全部楼层
    yitai121 发表于 2015-11-23 00:07
    我复制了这段程序,但还是没有声音出来,请问是为什么?我用的是2G的SD卡,是不是一定要用4G
    以上的卡? ...

    我用的是4G卡,2G卡手头没有就没试,另外文件是否为FAT32文件系统格式。
    程序已验证,要查问题可用原例程先测试一下看看,然后再用这个程序测一下,有利于分析。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2023-2-15 00:12
  • 签到天数: 969 天

    连续签到: 1 天

    [LV.10]以坛为家III

    175

    主题

    2843

    帖子

    34

    金牌会员

    Rank: 6Rank: 6

    积分
    7124
    最后登录
    2023-4-20
     楼主| 发表于 2015-11-23 11:24:57 | 显示全部楼层
    谢谢大家的支持,也感谢小七的打赏。正在写TSI触摸板的控制程序给大家分享,在次感谢社区所提供的支持,才能把设想变为现实,也期待积累多了能成书给大家分享。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /3 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2025-8-19 04:59 , Processed in 0.099028 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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