新聞中心

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

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

        作者: 時間:2016-11-26 來源:網絡 收藏
      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@死循環
      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調用匯編.可供以后參考.目前,串口輸入還有些問題,還得繼續調一下.串口遇到一個想不明白的問題,單單串口是正常的,但在打開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

        評論


        相關推薦

        技術專區

        關閉
        主站蜘蛛池模板: 山阳县| 太原市| 万山特区| 德清县| 南丹县| 麦盖提县| 衡南县| 长宁区| 和田市| 泗阳县| 龙州县| 华亭县| 奈曼旗| 泌阳县| 柞水县| 久治县| 乌海市| 广平县| 高尔夫| 弥勒县| 吐鲁番市| 河东区| 西畴县| 东莞市| 咸宁市| 德钦县| 枣阳市| 舒城县| 鹿泉市| 芦山县| 咸宁市| 竹北市| 商水县| 井陉县| 奉新县| 呈贡县| 应用必备| 长丰县| 宁远县| 得荣县| 武安市|