zhaoyongke 发表于 2011-10-13 00:00:35

2011,独立年,DSP伴我走过

2011年,是我人生的转折点。终于我告别了向父母要钱的日子,从经济上走向了独立。


先是忙着考研,总算顺利通过了初试、复试,拿到了录取通知。这是今年上半年的事了。

上半年还有一件不得不提的事,就是DSP。

接触DSP也就是从今年1月份开始的。考研前夕,学校有项目资金,买了块5509开发板。寒假正式开始研究。

用的HX-5509板子,TDS510仿真器,一共1100元买的

学习过程比较枯燥,无非就是IO口,时钟,中断,外设使用。但HX的视频教程比较丰富,我也从中学到很多知识,得到了一些乐趣,比如,通过DSP播放自己的声音,绘制各种波形、图像,做做FFT,FIR滤波实验等。

但我并不满足光盘里的例程。视频有时候也不够详细,只是泛泛而谈。于是我仔细阅读了TI官方文档,独立编写了一些实用程序,其中规模较大的是USB基础模块,并在学习DSP过程中充分利用了matlab这个工具,简化了开发,加速了学习进程。

其实基础的东西很关键,一遇到问题肯定都是这些方面:硬件配置,开发环境选项,调试环境建立。假期将这三个方面做了充分准备。

毕业设计是用5509完成便携式ECG系统设计,涉及到采集、存储、传输、回放、预警等功能。

有了假期的准备,开始真刀实枪上阵。

前端模拟采集模块已经在前一个项目里成熟,直接拿来用。

假期调试成功ADC,直接利用CCS就能看到采集的波形,很方便。

显示用的TFT屏是坛友Power G6提供的,分辨率240*400,调试顺利

有这三样东东,基本能显示ECG了,看着距离成功不远了,但其实还差很远

其次是数字滤波和心率计算,看了一位师兄提供的外文文献,将其算法实现,这需要用到假期准备的内容了。用matlab仿成功后,将滤波用C语言实现,在DSP上跑起来了。从开题到这里大约用了不到两周时间。

再然后就是存储。系统里有SD卡做大容量存储器,需要按FAT32文件系统来读写,之前没玩过SD卡,这时认真分析了一下文件系统格式,看了些代码,逐渐熟悉了怎么回事,然后确定了方案:将数据分段,按时间先后保存成单独文件,遇到很多问题。后来虽然解决了,但感觉健壮性仍不够。以后项目中采用FATFS。

再然后就是传输。USB调试花费了很长时间,问题也遇到很多,当时战线拉的太长,有时一天内先调试USB不成功,就继续调试SD卡,再然后调试系统菜单……全面进攻。后期重点进攻USB,实现了上位机显示、存储功能。

很快,大学时光就这样结束了,我拿到了毕业证,走向了社会。

研究生生活还没开始,自己决定先找个工作,锻炼自己,积累经验,体验生活。

于是到了京城

于是找了个小公司

于是开始了每天挤地铁

于是蜗居在一个偏僻的宿舍

于是拿着每月3000元的实习生待遇

于是继续搞DSP研究

暑假,酷热的京城,时不时迎来暴雨的洗礼

那段时间很不好过,晚上回宿舍等车有时半小时都等不到,遇到下雨更悲催,打车都没有,回到宿舍已经11点多……

京城的生活就是这样,没有人会“可怜”你,大家都很忙,自顾不暇


在此期间,学习了6455,并完成了几个项目中的部分工作,bootloader(基于Flash),高速总线接口(同Virtex5),NDK百兆网应用程序(上位机+下位机)等,也遇到不少问题,由于以前看过5509,学习时有了更明确的目标,针对应用深入学习了DSP的EMIFA,EDMA3,EMAC接口,并调试成功了这些模块。

终于能有同行称自己“赵工”

以后只要有机会,还会再搞DSP

shanyan 发表于 2011-10-13 00:15:32

恭喜!

guxingganyue 发表于 2011-10-13 00:27:22

好,,继续努力

huahseng 发表于 2011-10-13 08:15:27

很好,学习能力很强

windy__xp 发表于 2011-10-13 08:24:41

很强。

308995000 发表于 2011-10-15 17:28:26

mark!

yanghgc 发表于 2011-10-30 16:26:07

向你学习

hwdpaley 发表于 2011-10-31 11:35:03

学习,向楼主学习,先从简单的学起

weihao456 发表于 2011-11-1 00:47:20

回复【楼主位】zhaoyongke 赵永科
-----------------------------------------------------------------------

恩 不错~~~共勉~~

qwerttt 发表于 2011-11-2 09:03:40

请问楼主HX-5509板子怎么把程序下到外部FLASH
是否编写二次引导程序
能否提供简单例程参考?

zhaoyongke 发表于 2011-11-3 16:35:03

回复【9楼】qwerttt
-----------------------------------------------------------------------

Flash烧写可以直接用开发板提供的例程。

HX的板子不能直接从Flash引导,除非修改CPLD内容(CPLD工程是原理图完成的,改起来需要费点功夫)。建议通过SPI EEPROM或I2C EEPROM进行引导,将用户代码从Flash搬移到内部DARAM,然后运行用户程序。之前应将用户程序编译完生成.bin文件,通过自己写的Flash烧写程序,烧入Flash中。

只是提供一个思路,现在板子送老师了,不能帮你搞定这个问题,不好意思!

zhaoyongke 发表于 2011-11-3 16:45:39

回复【9楼】qwerttt
-----------------------------------------------------------------------

我暑假搞过6455上的bootloader in Flash,和你说的情况类似。

工程其实很简单,只贴主程序,涉及Flash烧写的程序可以参考HX提供的例程

//Flash烧写的工程main 函数
void main(void)
{
        unsigned char *pflash=(unsigned char *)0xb0000000;//指向Flash起始地址
        unsigned int i,n=0;
        unsigned int p;
        FILE *fp;//文件句柄,用于从PC磁盘读.bin文件
        fp=fopen("usercode.bin","rb");//打开文件,只读方式
        n=fread( temp_array,1,MAX_SIZE_OF_FILE,fp);//读取文件内容到数组temp_array,返回值n代表实际读取字节数
        if (n==0)
        {
                printf("error\n");
                while(1);
        }
        EraseFlash();//擦除整片Flash
        WriteData(0,n,temp_array);//将usercode.bin写入Flash
        printf("Burn OK\n");
         while(1);
}

//Bootloader 主函数
void (*pfun)(void);
void copy_flash_ram(void)
{
        unsigned int i,j,byte_count,ram_start_addr,rom_section_start_addr;
       
        pfun=(void (*)(void))(*((unsigned int *)PROG_IN_FLASH_ADDR));

        byte_count=(*((unsigned int *)PROG_IN_FLASH_ADDR+1));
        ram_start_addr=(*((unsigned int *)PROG_IN_FLASH_ADDR+2));
        rom_section_start_addr=PROG_IN_FLASH_ADDR+12;
        if(byte_count==0)
        {
                byte_count=0;
                return;
        }       
        while(1)
        {
                unsigned int temp=byte_count&0x03;
                for(i=0;i<byte_count;i++)
                {
                        for(j=0;j<3*1024;j++);
                        *((unsigned char *)ram_start_addr+i)=
                        *((unsigned char *)rom_section_start_addr+i);
                }
                if(temp)
                {
                        temp=4-temp;
                }
                rom_section_start_addr+=byte_count+temp;//必须对其到4的整数倍
                byte_count=(*((unsigned int *)rom_section_start_addr));
                rom_section_start_addr+=4;
                ram_start_addr=(*((unsigned int *)rom_section_start_addr));
                rom_section_start_addr+=4;
                if(byte_count==0)
                {
                        pfun();
                }
        }
}

span42 发表于 2011-11-3 17:37:19

记得跟你是校友,帮顶一个

zhaoyongke 发表于 2011-11-4 21:40:09

回复【12楼】span42 狂奔的蜗牛
-----------------------------------------------------------------------

哈哈,多谢捧场!

newkey 发表于 2011-11-5 00:09:55

求HX视频

zhaoyongke 发表于 2011-11-6 12:44:51

回复【14楼】newkey
-----------------------------------------------------------------------

学校计流量,恕不能上传~~

从官网下可以看这个http://www.mcuhx.com/Files/News12.htm

xiaoyuan_15 发表于 2011-11-7 15:42:07

学习了
页: [1]
查看完整版本: 2011,独立年,DSP伴我走过