搜索
bottom↓
回复: 8

430读SST Flash,用汇编能读,用C语言却不行,不知道差在哪...

[复制链接]

出0入0汤圆

发表于 2013-2-18 22:41:18 | 显示全部楼层 |阅读模式
本帖最后由 yz0853 于 2013-2-18 22:58 编辑

C语言:
  1. #include  <msp430x14x.h>
  2. void DELAY2(void)
  3. {
  4.   unsigned int i;
  5.   for(i=533;i>0;i--)
  6.   {
  7.   }
  8. }
  9. void DELAY12(void)
  10. {
  11.   unsigned int i;
  12.   for(i=3200;i>0;i--)
  13.   {
  14.   }
  15. }
  16. void DELAY200(void)
  17. {
  18.   unsigned int i;
  19.   for(i=26666;i>0;i--)
  20.   {
  21.   }
  22. }
  23. void main(void)
  24. {
  25.   volatile unsigned int i;
  26.   volatile unsigned int backdata;
  27.   WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT
  28.   
  29.   P5SEL |= 0x0E;                             // P5.1,2,3 SPI option select
  30.   P5DIR |= 0x0B;                             // P5.0,1,3 output direction
  31.   ME2 |= USPIE1;                             // Enable USART1 SPI
  32.   UCTL1 |= CHAR + SYNC + MM;                 // 8-bit SPI Master **SWRST**
  33.   UTCTL1 = SSEL0 + STC;                      // ACLK, 3-pin
  34.   UBR01 = 0x04;                              // ACLK/4 for baud rate
  35.   UBR11 = 0x00;                              // ACLK/4 for baud rate
  36.   UMCTL1 = 0x00;                             // Clear modulation
  37.   UCTL1 &= ~SWRST;                           // Initialize USART state

  38.   P5OUT &= ~0x01;                           //使能SST25VF020
  39.   DELAY2();
  40.   TXBUF1 = 0x03;                            //发送读命令
  41.   while(IFG2&UTXIFG1==0x00);                //发送完否?
  42.   TXBUF1=0x00;                              //发送读地址A23-A16
  43.   while(IFG2&UTXIFG1==0x00);                //发送完否?
  44.   TXBUF1=0x10;                              //发送读地址A8-A15
  45.   while(IFG2&UTXIFG1==0x00);                //发送完否?
  46.   TXBUF1=0x10;                              //发送读地址A0-A7
  47.   while(IFG2&UTXIFG1==0x00);                //发送完否?
  48.   TXBUF1=0x33;                              //发送伪数据用于产生接收数据CLK
  49.   while(IFG2&UTXIFG1==0x00);                //发送完否?
  50.   while(IFG2&URXIFG1==0x00);                //接收完否?
  51.   DELAY2();
  52.   backdata = RXBUF1;                       //存放读取的数据  
  53.   DELAY2();
  54.   P5OUT|=0x01;                             //禁止SST25VF020
  55.   
  56.   while (1);
  57. }
复制代码
汇编:
  1. #include "msp430.h"                     ; #define controlled include file

  2.         NAME    main                    ; module name

  3.         PUBLIC  main                    ; make the main label vissible
  4.                                         ; outside this module
  5.         ORG     0FFFEh
  6.         DC16    init                    ; set reset vector to 'init' label

  7.         RSEG    CSTACK                  ; pre-declaration of segment
  8.         RSEG    CODE                    ; place program in 'CODE' segment

  9. init:   MOV     #SFE(CSTACK), SP        ; set up stack

  10. main:   NOP                             ; main program
  11.         MOV.W   #WDTPW+WDTHOLD,&WDTCTL  ; Stop watchdog timer
  12. P5      bis.b   #0Eh,&P5SEL             ; P5.1,2,3 SPI option select
  13.         bis.b   #0Bh,&P5DIR             ; P5.3,1,0 output direction
  14. SPI1    bis.b   #USPIE1,&ME2            ; Enable USART1 SPI
  15.         bis.b   #CHAR+SYNC+MM,&UCTL1    ; 8-bit SPI Master
  16.         bis.b   #SSEL0+STC,&UTCTL1      ; ACLK, 3-pin
  17.         mov.b   #04h,&UBR01             ; ACLK/4 for baud rate
  18.         clr.b   &UBR11                  ; ACLK/4 for baud rate
  19.         clr.b   &UMCTL1                 ; Clear modulation
  20.         bic.b   #SWRST,&UCTL1           ; **Initialize USART state machine**
  21.         MOV     #00H,R6                 ;读写数据的地址:A23-A16
  22.         MOV     #10H,R7                 ;读写数据的地址:A15-A8
  23.         MOV     #10H,R8                 ;读写数据的地址:A7-A0
  24.         CALL    #RED
  25. LLLL    NOP
  26.         NOP
  27.         JMP     LLLL
  28. RED     bic.b   #01h,&P5OUT             ; 使能SST25VF020芯片
  29.         CALL    #DELAY2
  30.         mov.b   #03h,&TXBUF1            ; 发送读命令
  31. L10     BIT.B   #UTXIFG1,&IFG2          ;发送完否?
  32.         JZ      L10
  33.         mov.b   R6,&TXBUF1            ; 发送读地址A23-A16
  34. L11     BIT.B   #UTXIFG1,&IFG2          ;发送完否?
  35.         JZ      L11
  36.         mov.b   R7,&TXBUF1            ; 发送读地址A8-A15
  37. L12     BIT.B   #UTXIFG1,&IFG2          ;发送完否?
  38.         JZ      L12
  39.         mov.b   R8,&TXBUF1            ; 发送读地址A0-A7
  40. L13     BIT.B   #UTXIFG1,&IFG2          ;发送完否?
  41.         JZ      L13
  42.         MOV.B   &RXBUF1,R11
  43.         MOV.B   #33H,TXBUF1             ;发送伪数据用于产生接收数据CLK
  44. L14     BIT.B   #UTXIFG1,&IFG2           ;发送完否?
  45.         JZ      L14
  46. L15     bit.b   #URXIFG1,&IFG2          ; RXBUF ready?
  47.         JZ      L15                      ; 1 = ready
  48.         CALL    #DELAY2
  49.         mov.b   &RXBUF1,R5              ; 存放读取的数据
  50.         CALL    #DELAY2
  51.         bis.b   #01h,&P5OUT             ; 禁止SST25VF020
  52.         RET
  53. DELAY2  MOV     #533,R15
  54. LOOP1   DEC     R15
  55.         JNZ     LOOP1
  56.         RET
  57. DELAY12 MOV     #3200,R15
  58. LOOP2   DEC     R15
  59.         JNZ     LOOP2
  60.         RET
  61. DLAY200 MOV     #2,R14
  62. LOOP3   MOV     #26666,R15
  63. LOOP4   DEC     R15
  64.         JNZ     LOOP4
  65.         DEC     R14
  66.         JNZ     LOOP3
  67.         RET
  68.         END
复制代码


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

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

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

出0入0汤圆

 楼主| 发表于 2013-2-18 22:43:19 | 显示全部楼层
囧事连连,求大侠指导。

出0入8汤圆

发表于 2013-2-18 22:53:57 | 显示全部楼层
什么是不行?
总要有个现象

出0入0汤圆

 楼主| 发表于 2013-2-18 22:56:26 | 显示全部楼层
本帖最后由 yz0853 于 2013-2-18 22:57 编辑
liwei_jlu 发表于 2013-2-18 22:53
什么是不行?
总要有个现象




用汇编的话,能接收到红框内的数据。用C语言就不行了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-2-18 23:04:27 | 显示全部楼层
liwei_jlu 发表于 2013-2-18 22:53
什么是不行?
总要有个现象

感觉基本每一句都对上了,咋还不行,不知道为什么了。

出0入0汤圆

发表于 2013-2-18 23:12:52 | 显示全部楼层
妹妹,一般写FLASH都有个时间等待写入,也即是延时,所以请关闭你的编译器优化,因为C语言的延时函数会被优化,缩短预期的时间了。

出0入0汤圆

 楼主| 发表于 2013-2-18 23:33:35 | 显示全部楼层
HadesHe 发表于 2013-2-18 23:12
妹妹,一般写FLASH都有个时间等待写入,也即是延时,所以请关闭你的编译器优化,因为C语言的延时函数会被优 ...



貌似还是不行,是这里关的么?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

 楼主| 发表于 2013-2-19 14:30:43 | 显示全部楼层
cbing2000 发表于 2013-2-19 12:58
这里有个主意点: UTXIFG只是表明数据已经不再发送缓存了,但是你要知道总线上还是串行移位的,这时候数据 ...

可是用汇编就可以的,我现在最奇怪的是两者代码几乎一致,结果却不同。
嗯,busy问题我再去研究一下,刚用430,很多问题都没碰到过,好郁闷

出0入0汤圆

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

本版积分规则

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

GMT+8, 2024-5-20 21:06

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

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