在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            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ū)

            關閉