<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > GNU ARM匯編--(九)s3c2440的PWM

          GNU ARM匯編--(九)s3c2440的PWM

          作者: 時間:2016-11-26 來源:網(wǎng)絡 收藏
        1. //movr2,r0
        2. ldrr1,=TCNTB0
        3. //ldrr2,=200
        4. strr0,[r1]
        5. movr0,r0,LSR#2
        6. ldrr1,=TCMPB0
        7. //ldrr2,=50
        8. strr0,[r1]
        9. ldrr1,=TCON
        10. ldrr2,=(DZ_eable<<4)|(auto_reload<<3)|(inverter<<2)|(man_update<<1)|(start<<0)
        11. strr2,[r1]
        12. ldrr1,=TCON
        13. ldrr2,=(DZ_eable<<4)|(auto_reload<<3)|(inverter<<2)|(clear_man_update<<1)|(start<<0)
        14. strr2,[r1]
        15. ldrr2,=GPBDAT
        16. ldrr1,=0x1a0
        17. strr1,[r2]
        18. movpc,lr
        19. main:
        20. ldrr1,=TCON
        21. ldrr2,=(DZ_eable<<4)|(auto_reload<<3)|(inverter<<2)|(man_update<<1)|(stop<<0)
        22. strr2,[r1]
        23. ldrlr,=loop
        24. ldrpc,_pwm_uart_test
        25. _pwm_uart_test:.wordpwm_uart_test
        26. loop:
        27. bloop@死循環(huán)
        28. undefined_instruction:
        29. nop
        30. software_interrupt:
        31. nop
        32. prefetch_abort:
        33. nop
        34. data_abort:
        35. nop
        36. not_used:
        37. nop
        38. fiq:
        39. nop
        40. pwm_uart_test.c內容如下:
          [cpp]view plaincopy
          1. #include"pwm_uart_test.h"
          2. externvoidBuzzer_Freq_Set(intfreq);
          3. //externvoidBuzzer_Freq_Set(void);
          4. charuart_GetByte(void)
          5. {
          6. while(!(rUTRSTAT0&0x1));//WaituntilTHRisempty.
          7. returnRdURXH0();
          8. }
          9. voiduart_GetString(char*pt)
          10. {
          11. while(*pt)
          12. uart_GetByte();
          13. }
          14. voiduart_SendByte(intdata)
          15. {
          16. if(data==)
          17. {
          18. while(!(rUTRSTAT0&0x2));
          19. WrUTXH0();
          20. }
          21. while(!(rUTRSTAT0&0x2));//WaituntilTHRisempty.
          22. WrUTXH0(data);
          23. }
          24. //====================================================================
          25. voiduart_SendString(char*pt)
          26. {
          27. while(*pt)
          28. uart_SendByte(*pt++);
          29. }
          30. voiduart_test(void)
          31. {
          32. charstr[20]="helloworld";
          33. inta=97;
          34. //while(1)
          35. //uart_SendByte(a);
          36. uart_SendString(str);
          37. chars=uart_GetByte();
          38. //if(s==a)
          39. if(s==97)
          40. rGPBDAT=0x1c0;
          41. //uart_SendByte(a);
          42. //uart_SendByte(97);
          43. //uart_SendByte(a);
          44. uart_SendByte((int)s);
          45. uart_SendByte((int)s);
          46. }
          47. voidpwm_uart_test(void)
          48. {
          49. intfreq=10;
          50. Buzzer_Freq_Set(freq);
          51. //Buzzer_Freq_Set();
          52. uart_SendString("start");
          53. /*
          54. inti;
          55. for(i=0;i<1000;i++)
          56. uart_SendString("wait");
          57. while(1)
          58. {
          59. charkey=uart_GetByte();
          60. uart_SendByte(key);
          61. if(key==a||key==A)
          62. {
          63. if(freq<2000)//lci20000
          64. freq+=10;
          65. uart_SendByte(a);
          66. Buzzer_Freq_Set(freq);
          67. }
          68. if(key==b||key==B)
          69. {
          70. if(freq>11)
          71. freq-=10;
          72. uart_SendByte(b);
          73. Buzzer_Freq_Set(freq);
          74. }
          75. //uart_SendString(" Freq=%d",freq);
          76. //if(key==ESC_KEY)
          77. //{
          78. //Buzzer_Stop();
          79. //return;
          80. //}
          81. }
          82. */
          83. }

          在這個例子中,既有匯編調用c,也有c調用匯編.可供以后參考.目前,串口輸入還有些問題,還得繼續(xù)調一下.串口遇到一個想不明白的問題,單單串口是正常的,但在打開PWM定時器后,串口就出問題了,打印只能出前面幾個字符,這是個神馬情況,有人知道的請幫我下,thks!
          從代碼中有這樣的設定:
          定時器的輸入時鐘為@定時器輸入時鐘周期 = PCLK/(prescaler + 1)/(divider value)
          @clk = 100M/(249+1)/8=25k
          TCNTB0設為200,而TCMPB0為50,則TOUT0輸出占空比為25%的方波,方波的周期為200/clk=8ms
          如果有示波器,倒可以驗證一下這個結果.如果有對朋友覺得這個方波估計的不對,歡迎指出,謝謝!

          上一頁 1 2 3 下一頁

          關鍵詞: ARM匯編s3c2440PW

          評論


          相關推薦

          技術專區(qū)

          關閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();