搜索
bottom↓
回复: 22

带完整歌词 mp3 player 的ARM移植(AT91SAM7S256)(利用本站mp3板+7S256最小系统板)(WinARM

[复制链接]

出0入0汤圆

发表于 2007-12-8 13:22:37 | 显示全部楼层 |阅读模式
最近几天刚开始接触AT91SAM7S系列的arm,做过几个小实验后决定移植一下以前编写的mp3程序。
这次移植的对象是这个:
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=850436&bbs_page_no=1&search_mode=3&search_text=bozai&bbs_id=9999

这个所需要的固件(字库)文件在上面的连接可以找到。

从做晚下班看时就开始着手移植,弄到夜里三点,那时坛子上只有5个人在线了。还好终于响了,但是还有bug。
今天早上9点半起来一直到现在,认真调试了一下,把所有bug都给解决了,然后整理整理了程序。现在发上来。

arm是atmel的AT91SAM7S256, 前一阵子在淘宝淘到一块便宜的最小系统板。

mp3母板就是网站的mp3板(很好的一个板子,可惜要不产了),用跳线把板子上的m64复位住,然后用杜邦线连到s256最小系统板。
这样就算完成了。


程序的移植的确是个头疼的问题,从8位机的avr,转到32位机的arm,很多都有问题。最大的问题是结构体边界对奇问题,还有就是数据对奇问题(奇数地值读写导致exception)。所以导致程序很多强制转换出问题了。另外我以为很快就会移植完呢,没想到花了这么长时间。“lvhaian 安哥”也移植过类似的,不容易啊。

有个问题很奇怪,就是printf这个函数,如果自孚串没有\r\n的话,前面的不会显示。如printf("test"); 光这个不行,不会现实要在后面或者后面其他的printf带\r\n这个才会显示,似乎是等到\r\n一起发的,所以有时候会导致乱序。这个问题让我很是纳闷。希望知道的高手指引一下。谢谢!

不过通过移植也发现了如何在写出兼容性好的程序。
比如说,自定义数据类型 uint8 uint16 uint32 因为unsigned int类型 avr是16位,而arm是32位
内存读写,如果不能保证是否是align(4) 可以自定义读写,这样不需要考虑地址对其。


下面是我的开发环境: SourceInsight3.5  WinARM20060606 H-JTAG

一些图片:




程序:
(程序的功能和上面给的连接的功能相同,只不过少了USB功能)
点击此处下载ourdev_186426.zip(文件大小:812K)

电路连接:(电路图参考连接帖)
管教配置:
#define MMC_SD_CS                (1<<15)
#define MMC_SD_SCK                (1<<14)
#define MMC_SD_MOSI        (1<<13)
#define MMC_SD_MISO        (1<<12)

#define VS1003B_XCS                (1<<16)
#define VS1003B_DREQ        (1<<20)
#define VS1003B_XDCS        (1<<23)
#define VS1003B_XRESET        (1<<22)
#define VS1003B_SCK                (1<<14)
#define VS1003B_MOSI        (1<<13)
#define VS1003B_MISO        (1<<12)

/* pins of the signal */
#define LCD_RS                (1<<24)
#define LCD_E                (1<<25)
#define LCD_RST                (1<<26)
#define LCD_SCK                (1<<14)
#define LCD_MOSI        (1<<13)


#define MODE        (1<<3)
#define STOP
#define NEXT                (1<<31)
#define UP                (1<<0)
#define DOWN        (1<<2)
#define PREV         (1<<1)



哈哈,终于搞定了。都18小时没进食了,发完此帖就要出去了,休息休息!
这个程序大家需要的看一下吧。谢谢!

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

发表于 2007-12-8 13:27:24 | 显示全部楼层
bozai,太佩服你了。

出0入0汤圆

发表于 2007-12-8 13:30:16 | 显示全部楼层
bozai , 不得不佩服您 ~!

出0入0汤圆

 楼主| 发表于 2007-12-8 13:49:05 | 显示全部楼层
过奖了,谢谢!

出0入137汤圆

发表于 2007-12-8 15:02:44 | 显示全部楼层
牛牛

出0入0汤圆

发表于 2007-12-8 20:19:44 | 显示全部楼层
波仔,学习新单片机速度好快呀!

出0入0汤圆

发表于 2007-12-8 21:59:47 | 显示全部楼层
赞一个~

出0入0汤圆

发表于 2007-12-8 22:06:04 | 显示全部楼层
强啊!!!!

出0入0汤圆

 楼主| 发表于 2007-12-18 00:01:25 | 显示全部楼层
谢谢各位:
    后来我从mcuzone买了s64 mp3空板,其实就是这里的板子:
http://www.ouravr.com/bbs/bbs_content.jsp?bbs_sn=694551&bbs_page_no=1&bbs_id=1032

买回来焊接基本的器件就可以工作了,只要把程序中的端口再重新定义一下就可以了。至于液晶屏,由于我的程序可以不用spi接口操作 ,所以可以使用任意端口就可以了,这里我接PA0~PA4

程序(我这块板子的可以试一下):
点击此处下载ourdev_189772.zip(文件大小:810K)

一些图片:




这块板子大部分元件都焊了,就是有一个74LVC543找不到,上周在苏州赛格找了一大圈也没找到。

PS: 这次去苏州赛格发现现在的赛格已经慢慢变的很不错了,可以找到很多芯片。 买了4片AT45DB161B, 5块一片,很便宜(不知道是不是卖错了)

出0入0汤圆

发表于 2007-12-18 01:00:47 | 显示全部楼层
bozai 45db161这么便宜阿 我上个星期天去上海赛格 sop8封装的45db161最低还得11块 嘿嘿 看来真的要去一下苏州赛格了

出0入0汤圆

 楼主| 发表于 2007-12-18 01:03:06 | 显示全部楼层
所以我直接怀疑他卖错了,不过我买到的批号还是02年的,不知道是不是品质没现在的好。

出0入0汤圆

发表于 2007-12-18 09:12:19 | 显示全部楼层
bozai 厉害阿,值得学习 !

出0入0汤圆

发表于 2008-5-8 15:22:28 | 显示全部楼层
怎一个强字了得

出0入0汤圆

发表于 2008-5-12 14:01:19 | 显示全部楼层
楼主牛人,不的不佩服,赞!

出0入0汤圆

发表于 2008-5-12 16:09:41 | 显示全部楼层
记号

出0入0汤圆

发表于 2008-7-3 23:41:30 | 显示全部楼层
ding.

出0入0汤圆

发表于 2008-7-5 08:48:08 | 显示全部楼层
不错,准备学习! 手上正在画AT91SAM7S256这个板

出0入0汤圆

发表于 2009-7-20 01:24:28 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-20 01:24:56 | 显示全部楼层
mark

出0入0汤圆

发表于 2009-7-28 10:58:19 | 显示全部楼层
恩。很值得学习啊

出0入0汤圆

发表于 2009-8-19 08:53:01 | 显示全部楼层
好佩服啊

出0入0汤圆

发表于 2009-8-19 09:20:36 | 显示全部楼层
牛!

出0入0汤圆

发表于 2009-8-30 08:46:32 | 显示全部楼层
请教楼主个问题,SD容量查询函数怎么写的这么复杂,能解释一下吗?

uint32 MMC_SD_ReadCapacity(void)
{
    ......

/*********************************/
//        C_SIZE
        i = buffer[6]&0x03;
        i<<=8;
        i += buffer[7];
        i<<=2;
        i += ((buffer[8]&0xc0)>>6);

/**********************************/
//  C_SIZE_MULT

        r1 = buffer[9]&0x03;
        r1<<=1;
        r1 += ((buffer[10]&0x80)>>7);


/**********************************/
// BLOCKNR

        r1+=2;

        temp = 1;
        while(r1)
        {
                temp*=2;
                r1--;
        }
       
        Capacity = ((uint32)(i+1))*((uint32)temp);

/////////////////////////
// READ_BL_LEN

        i = buffer[5]&0x0f;

/*************************/
//BLOCK_LEN

        temp = 1;
        while(i)
        {
                temp*=2;
                i--;
        }
/************************/


/************** formula of the capacity ******************/
//
//  memory capacity = BLOCKNR * BLOCK_LEN
//       
//        BLOCKNR = (C_SIZE + 1)* MULT
//
//           C_SIZE_MULT+2
//        MULT = 2
//
//               READ_BL_LEN
//        BLOCK_LEN = 2
/**********************************************/

//The final result
       
        Capacity *= (uint32)temp;         
        return Capacity;               
}
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-12 20:00

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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