回Computer00,您提到的那篇**在博客的哪一页,没找到.

[复制链接]
 楼主| 古道热肠 发表于 2009-3-28 10:34 | 显示全部楼层 |阅读模式
用ARM开发产品,没有了位指令,机器架构又是流水线结构,分枝指令严重影响效率,对ARM汇编又不熟悉.到底始何写C语言程序才能高效运行.先写两个函数,大家提提优化建议.<br /><br />static&nbsp;uchar&nbsp;SD_SPI_ReadByte(void)<br />{<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucReadData;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucCount;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ucReadData&nbsp;=&nbsp;0;<br />&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_SI_High();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(ucCount=8;&nbsp;ucCount;&nbsp;--ucCount)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucReadData&nbsp;&lt&lt=&nbsp;1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_Low();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_High();<br />&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(GetSDCard_SO_Value())<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(AT91F_PIO_GetInput(&nbsp;AT91C_BASE_PIOA)&nbsp;&&nbsp;SD_SO)&nbsp;&nbsp;//内联函数,无调用开销<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucReadData&nbsp;|=&nbsp;0x01;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucReadData++;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;return(ucReadData);<br />}<br /><br />void&nbsp;&nbsp;VS1003B_SPIPutChar(unsigned&nbsp;char&nbsp;ucSendData)<br />{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />//&nbsp;&nbsp;&nbsp;&nbsp;S0SPDR&nbsp;=&nbsp;c;<br />//&nbsp;&nbsp;&nbsp;&nbsp;while((S0SPSR&nbsp;&&nbsp;0x80)&nbsp;==&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待SPI将数据发送完毕<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucCount;<br />&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucMaskCode;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;ucMaskCode&nbsp;=&nbsp;0x80;<br />&nbsp;&nbsp;&nbsp;&nbsp;for(ucCount=8;&nbsp;ucCount;&nbsp;--ucCount)<br />&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_Low();<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ucMaskCode&nbsp;&&nbsp;ucSendData)<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_SI_High();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_SI_Low();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_High();<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucMaskCode&nbsp;&gt&gt=&nbsp;1;<br /><br />&nbsp;&nbsp;&nbsp;&nbsp;}<br />}<br />
alex74 发表于 2009-3-30 14:00 | 显示全部楼层

....

芯片不是这样玩的.<br />以下原则千万遵守<br /><br />1.&nbsp;能用硬件解决就用硬件.别用软件模拟.才几十M就觉得很宽裕?用1G的DSP都不敢这么用.<br /><br />2.&nbsp;资源足够,能上操作系统千万别裸奔.裸奔不代表高手,恰恰是落后的象征.<br /><br />3.&nbsp;能用C千万别写汇编.我敢担保你基本写不出能比ARM编译器更快的汇编.32位芯片有流水线的,和单片机不一样,很容易产生寄存器竞争的.比如上条指令写R0,下一条指令读R0的话就会有2-3个clk的延时.MDK使用ADS3的编译器,虽然比不上最新的ADS4编译器,但是已经很厉害了.<br /><br />4.&nbsp;写代码一定要系统无关性.无论在arm7,arm9,还是pc上都是能跑的.平时调程序多用VC,调好后直接上板,争取一次成功.<br /><br />5.&nbsp;用操作系统千万记得线程安全性.&nbsp;要保护多个线程操作一个硬件.<br /><br />
 楼主| 古道热肠 发表于 2009-3-28 10:40 | 显示全部楼层

补充一下,上面带Macro开头的语句都是宏调用,无开销

#define&nbsp;Macro_Set_SI_High()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_SetOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;SD_SDIN&nbsp;)<br />#define&nbsp;Macro_Set_SI_Low()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_ClearOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;SD_SDIN)<br /><br />#define&nbsp;Macro_Set_CLK_High()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_SetOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;SD_SCLK)&nbsp;<br />#define&nbsp;Macro_Set_CLK_Low()&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_ClearOutput(&nbsp;AT91C_BASE_PIOA,&nbsp;SD_SCLK)&nbsp;<br />后面的函数是内联库函数,编译直接插入功能函数中.
 楼主| 古道热肠 发表于 2009-3-28 10:44 | 显示全部楼层

最近试了一把用AT91SAM7S64+VS1003B播放MP3音乐,320kbps有些杂音

256KbPS时,MCU还有空闲,上升到320kbPS时,MCU满负载,耳机中有杂音,系数据断流所致.哈哈,此贴为抛砖引玉贴,最后底层读写肯定要用硬件SPI实现,但其优化的思路和方法可用到程序的其它地方,会带来更多性能的提升.
computer00 发表于 2009-3-28 10:54 | 显示全部楼层

开硬件SPI吧,再加上DMA。

  
xwj 发表于 2009-3-28 11:09 | 显示全部楼层

晕,不要拿着ARM当单片机用啊~~~

尽量启用硬件SPI、DMA
 楼主| 古道热肠 发表于 2009-3-28 11:36 | 显示全部楼层

当然最后肯定要用硬件SPI的,但俺深信优化还是大有益处的

贴上仿真时的汇编源程序,简单的移位变换处理,为什么要用到NOP指令,没整明白,哈哈,会ARM汇编的不妨指点指点.<br />&nbsp;&nbsp;&nbsp;&nbsp;36:&nbsp;&nbsp;<br />0x0010020C&nbsp;&nbsp;E1A00C84&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R4,LSL&nbsp;#25<br />0x00100210&nbsp;&nbsp;E1A04C20&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R4,R0,LSR&nbsp;#24<br />&nbsp;&nbsp;&nbsp;&nbsp;37:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_Low();&nbsp;<br />0x00100214&nbsp;&nbsp;E1A00000&nbsp;&nbsp;NOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;620:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pPio-&gtPIO_CODR&nbsp;=&nbsp;flag;&nbsp;<br />0x00100218&nbsp;&nbsp;E3A00901&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,#0x00004000<br />0x0010021C&nbsp;&nbsp;E2401B13&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,R0,#0x00004C00<br />0x00100220&nbsp;&nbsp;E5810034&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,[R1,#0x0034]<br />&nbsp;&nbsp;&nbsp;621:&nbsp;}&nbsp;<br />0x00100224&nbsp;&nbsp;E1A00000&nbsp;&nbsp;NOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;38:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_High();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;39:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;40:&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(GetSDCard_SO_Value())&nbsp;<br />0x00100228&nbsp;&nbsp;E3A01901&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,#0x00004000<br />0x0010022C&nbsp;&nbsp;E2400B13&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R0,#0x00004C00<br />0x00100230&nbsp;&nbsp;EB0000D5&nbsp;&nbsp;BL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_SetOutput(0x0010058C)<br />&nbsp;&nbsp;&nbsp;&nbsp;41:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(AT91F_PIO_GetInput(&nbsp;AT91C_BASE_PIOA)&nbsp;&&nbsp;SD_SO)&nbsp;&nbsp;//内联函数,无调用开销&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;42:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;43:&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucReadData&nbsp;|=&nbsp;0x01;&nbsp;<br />0x00100234&nbsp;&nbsp;E1A00000&nbsp;&nbsp;NOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;586:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;pPio-&gtPIO_PDSR;&nbsp;<br />0x00100238&nbsp;&nbsp;E59F00C8&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,[PC,#0x00C8]<br />0x0010023C&nbsp;&nbsp;E590003C&nbsp;&nbsp;LDR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,[R0,#0x003C]<br />0x00100240&nbsp;&nbsp;E3100A01&nbsp;&nbsp;TST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,#0x00001000<br />0x00100244&nbsp;&nbsp;0A000001&nbsp;&nbsp;BEQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00100250<br />&nbsp;&nbsp;&nbsp;&nbsp;44:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucReadData++;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;45:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;46:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />0x00100248&nbsp;&nbsp;E2840001&nbsp;&nbsp;ADD&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R4,#0x00000001<br />0x0010024C&nbsp;&nbsp;E20040FF&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R4,R0,#0x000000FF<br />&nbsp;&nbsp;&nbsp;&nbsp;33:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(ucCount=8;&nbsp;ucCount;&nbsp;--ucCount)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;34:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;35:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucReadData&nbsp;&lt&lt=&nbsp;1;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;36:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;37:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_Low();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;38:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_High();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;39:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;40:&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(GetSDCard_SO_Value())&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;41:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(AT91F_PIO_GetInput(&nbsp;AT91C_BASE_PIOA)&nbsp;&&nbsp;SD_SO)&nbsp;&nbsp;//内联函数,无调用开销&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;42:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;43:&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucReadData&nbsp;|=&nbsp;0x01;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;44:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucReadData++;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;45:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;46:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />0x00100250&nbsp;&nbsp;E2450001&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R5,#0x00000001<br />0x00100254&nbsp;&nbsp;E20050FF&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R5,R0,#0x000000FF<br />0x00100258&nbsp;&nbsp;E3550000&nbsp;&nbsp;CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R5,#0x00000000<br />0x0010025C&nbsp;&nbsp;1AFFFFEA&nbsp;&nbsp;BNE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x0010020C<br />&nbsp;&nbsp;&nbsp;&nbsp;47:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(ucReadData);&nbsp;<br />0x00100260&nbsp;&nbsp;E1A00004&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R4<br />0x00100264&nbsp;&nbsp;E8BD4070&nbsp;&nbsp;LDMIA&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R13!,{R4-R6,R14}<br />&nbsp;&nbsp;&nbsp;&nbsp;48:&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;49:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;50:&nbsp;void&nbsp;&nbsp;VS1003B_SPIPutChar(unsigned&nbsp;char&nbsp;ucSendData)&nbsp;<br />0x00100268&nbsp;&nbsp;E12FFF1E&nbsp;&nbsp;BX&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R14<br />&nbsp;&nbsp;&nbsp;&nbsp;51:&nbsp;{&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;52:&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;S0SPDR&nbsp;=&nbsp;c;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;53:&nbsp;//&nbsp;&nbsp;&nbsp;&nbsp;while((S0SPSR&nbsp;&&nbsp;0x80)&nbsp;==&nbsp;0);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//等待SPI将数据发送完毕&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;54:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucCount;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;55:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;uchar&nbsp;ucMaskCode;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;56:&nbsp;&nbsp;<br />0x0010026C&nbsp;&nbsp;E92D4070&nbsp;&nbsp;STMDB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R13!,{R4-R6,R14}<br />0x00100270&nbsp;&nbsp;E1A04000&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R4,R0<br />&nbsp;&nbsp;&nbsp;&nbsp;57:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucMaskCode&nbsp;=&nbsp;0x80;&nbsp;<br />0x00100274&nbsp;&nbsp;E3A05080&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R5,#0x00000080<br />&nbsp;&nbsp;&nbsp;&nbsp;58:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(ucCount=8;&nbsp;ucCount;&nbsp;--ucCount)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;59:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />0x00100278&nbsp;&nbsp;E3A06008&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R6,#0x00000008<br />0x0010027C&nbsp;&nbsp;EA000016&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x001002DC<br />&nbsp;&nbsp;&nbsp;&nbsp;60:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_Low();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;61:&nbsp;&nbsp;<br />0x00100280&nbsp;&nbsp;E1A00000&nbsp;&nbsp;NOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;620:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pPio-&gtPIO_CODR&nbsp;=&nbsp;flag;&nbsp;<br />0x00100284&nbsp;&nbsp;E3A00901&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,#0x00004000<br />0x00100288&nbsp;&nbsp;E2401B13&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,R0,#0x00004C00<br />0x0010028C&nbsp;&nbsp;E5810034&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,[R1,#0x0034]<br />&nbsp;&nbsp;&nbsp;621:&nbsp;}&nbsp;<br />0x00100290&nbsp;&nbsp;E1A00000&nbsp;&nbsp;NOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;62:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ucMaskCode&nbsp;&&nbsp;ucSendData)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;63:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />0x00100294&nbsp;&nbsp;E1150004&nbsp;&nbsp;TST&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R5,R4<br />0x00100298&nbsp;&nbsp;0A000003&nbsp;&nbsp;BEQ&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x001002AC<br />&nbsp;&nbsp;&nbsp;&nbsp;64:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_SI_High();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;65:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;66:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;67:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />0x0010029C&nbsp;&nbsp;E3A01A02&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,#0x00002000<br />0x001002A0&nbsp;&nbsp;E2410B0B&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R1,#0x00002C00<br />0x001002A4&nbsp;&nbsp;EB0000B8&nbsp;&nbsp;BL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_SetOutput(0x0010058C)<br />0x001002A8&nbsp;&nbsp;EA000005&nbsp;&nbsp;B&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x001002C4<br />&nbsp;&nbsp;&nbsp;&nbsp;68:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_SI_Low();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;69:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;70:&nbsp;&nbsp;<br />0x001002AC&nbsp;&nbsp;E1A00000&nbsp;&nbsp;NOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />0x001002B0&nbsp;&nbsp;E3A00A02&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,#0x00002000<br />0x001002B4&nbsp;&nbsp;E2401B0B&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,R0,#0x00002C00<br />0x001002B8&nbsp;&nbsp;E5810034&nbsp;&nbsp;STR&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,[R1,#0x0034]<br />0x001002BC&nbsp;&nbsp;E1A00000&nbsp;&nbsp;NOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />0x001002C0&nbsp;&nbsp;E1A00000&nbsp;&nbsp;NOP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;71:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_High();&nbsp;<br />0x001002C4&nbsp;&nbsp;E3A01901&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R1,#0x00004000<br />0x001002C8&nbsp;&nbsp;E2410B13&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R1,#0x00004C00<br />0x001002CC&nbsp;&nbsp;EB0000AE&nbsp;&nbsp;BL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;AT91F_PIO_SetOutput(0x0010058C)<br />&nbsp;&nbsp;&nbsp;&nbsp;72:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucMaskCode&nbsp;&gt&gt=&nbsp;1;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;73:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;74:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />0x001002D0&nbsp;&nbsp;E1A050C5&nbsp;&nbsp;MOV&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R5,R5,ASR&nbsp;#1<br />&nbsp;&nbsp;&nbsp;&nbsp;58:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for(ucCount=8;&nbsp;ucCount;&nbsp;--ucCount)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;59:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;60:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_Low();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;61:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;62:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(ucMaskCode&nbsp;&&nbsp;ucSendData)&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;63:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;64:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_SI_High();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;65:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;66:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;67:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;68:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_SI_Low();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;69:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;70:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;71:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Macro_Set_CLK_High();&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;72:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ucMaskCode&nbsp;&gt&gt=&nbsp;1;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;73:&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;74:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;<br />0x001002D4&nbsp;&nbsp;E2460001&nbsp;&nbsp;SUB&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R0,R6,#0x00000001<br />0x001002D8&nbsp;&nbsp;E20060FF&nbsp;&nbsp;AND&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R6,R0,#0x000000FF<br />0x001002DC&nbsp;&nbsp;E3560000&nbsp;&nbsp;CMP&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;R6,#0x00000000<br />0x001002E0&nbsp;&nbsp;1AFFFFE6&nbsp;&nbsp;BNE&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;0x00100280<br />&nbsp;&nbsp;&nbsp;&nbsp;75:&nbsp;}&nbsp;
computer00 发表于 2009-3-28 13:09 | 显示全部楼层

我晕...你慢慢优化吧...俺直接上SPI和DMA...

  
hotpower 发表于 2009-3-28 13:16 | 显示全部楼层

俺也晕个~~~有SPI和DMA不用就是犯罪~~~

  
computer00 发表于 2009-3-28 13:20 | 显示全部楼层

哈哈……顶大叔,不但犯罪,还犯X~~~~

  
hotpower 发表于 2009-3-28 13:22 | 显示全部楼层

哈哈~~~ARM时代不浪费都是犯罪~~~

  
HWM 发表于 2009-3-28 14:56 | 显示全部楼层

哈哈~~~ARM时代乱归类都是犯罪~~~

都把SPI,DMA,...集成在芯片内了,为何不用呢?<br /><br />哦,因为把那玩意儿当“单片机”用了。<br /><br />相当精彩的逻辑!<br />
 楼主| 古道热肠 发表于 2009-3-28 15:24 | 显示全部楼层

我的乖乖,不能跟您们急了.说得是抛砖引玉,引来一堆口

即使用到ARM.需要优化的地方也很多.比如显示部分,比如流戏快速查找位表,比如快速贴BMP图.不要以为跨到ARM就可以高枕无忧了,曾看过老外用AT91SAM7S64在TFT的LCD上做的仿真钟,就用全汇编写的,为啥?追求速度.但俺不提倡全盘用汇编,我的理解是会用汇编比一无所知好.知道如何优化比不知道好.
 楼主| 古道热肠 发表于 2009-3-29 09:46 | 显示全部楼层

哈哈,终于搞定了,原来是优化等级设定不当

把优化等级设成level&nbsp;-3&nbsp;播放320Kbps的MP3,MCU还有很多空闲时间向串口喊叫&quot;I&nbsp;am&nbsp;Free&quot;
alex74 发表于 2009-3-29 09:49 | 显示全部楼层

...

ARM编译器出名的好,你基本不可能写出汇编比编译器编出来的还快
 楼主| 古道热肠 发表于 2009-3-29 09:49 | 显示全部楼层

谢谢NetJob等,贴上一个用于测试的完整MDK项目,专测串并转换用

  <br /> 相关链接:<a href='https://bbs.21ic.com/upfiles/img/20093/200932994644479.rar'>https://bbs.21ic.com/upfiles/img/20093/200932994644479.rar</a>
 楼主| 古道热肠 发表于 2009-3-29 09:54 | 显示全部楼层

MDK的优化页面内容如下,熟悉的朋友讲讲具体功能

找MDK自带的帮助,也没发现详细的介绍.
渤海三叠浪 发表于 2009-3-29 10:14 | 显示全部楼层

楼上画面看起来不错啊

用的电脑是宽屏么??
wangkj 发表于 2009-3-30 08:38 | 显示全部楼层

鼓捣热肠,最终将成为at91sam7s的砖家

佩服,俺太偷懒了,能省事就省事。
 楼主| 古道热肠 发表于 2009-3-30 12:44 | 显示全部楼层

呵呵,是打算把它当砖头用.还蛮结实的

有次焊接时调了1个180度,通电后发现不对劲,再转回来焊,还能用.
您需要登录后才可以回帖 登录 | 注册

本版积分规则

284

主题

6411

帖子

16

粉丝
快速回复 在线客服 返回列表 返回顶部