好爽又高潮了毛片免费下载,国产97在线 | 亚洲,亚洲一区二区三区AV无码,特级AAAAAAAAA毛片免费视频

行業產品

  • 行業產品

沈陽芯碩科技有限公司


當前位置:沈陽芯碩科技有限公司>>單片機/芯片>>華大MCU端口使用時的競爭-冒險現象

華大MCU端口使用時的競爭-冒險現象

返回列表頁
參  考  價面議
具體成交價以合同協議為準

產品型號

品       牌

廠商性質代理商

所  在  地沈陽市

聯系方式:宣女士查看聯系方式

更新時間:2021-09-23 13:05:33瀏覽次數:310次

聯系我時,請告知來自 智慧城市網

經營模式:代理商

商鋪產品:94條

所在地區:遼寧沈陽市

聯系人:宣女士 (經理)

產品簡介

在使用華大單片機時對GPIO操作是基礎的操作,即使這種操作如果不注意還是會掉到坑里去。

詳細介紹

在使用華大單片機時對GPIO操作是基礎的操作,即使這種操作如果不注意還是會掉到坑里去。
  
例如:使用同一組GPIO端口中的兩個引腳(PA00PA01)做輸出,PA00在主循環中改變輸出狀態,PA01通過中斷方式改變輸出狀態。正常的情況應該是PA00只在主循環中改變輸出狀態,而PA01只會在中斷發生時改變輸出狀態。但是,隨著程序運行時間的加長或者在主循環中提高PA00輸出的頻率,會發現本應該在中斷中完成狀態改變的PA01,個別時候狀態會不發生改變。而在中斷服務程序中設置斷點,進行debug發現中斷可以正常進入,也能正常改變PA01的輸出狀態。要想分析造成這個情況的原因可以從網上提供的DDL庫入手來分析。華大單片機M0+系列芯片在對GPIO端口輸出電平操作時,DDL庫提供了如下兩種方法:


方法1

<p><font face="微軟雅黑" size="3">/*****************************************************************************

 ** brief GPIO IO輸出值寫入

 **

 ** param [in]  enPort          IO Port

 ** param [in]  enPin           IO Pin

 ** param [out] bVal            輸出值

 **

 ** retval en_result_t           Ok          設置成功

 **                                         其他值    設置失敗 ******************************************************************************/

en_result_t Gpio_WriteOutputIO(en_gpio_port_t enPort, en_gpio_pin_t enPin, boolean_t bVal)

{

    SetBit(((uint32_t)&M0P_GPIO->PAOUT + enPort), enPin, bVal);</font></p><p><font face="微軟雅黑" size="3">    return Ok;

}</font></p>

方法2

<p><font face="微軟雅黑" size="3">/*******************************************************************************

 ** brief GPIO IO設置

 **

 ** param [in]  enPort          IO Port

 ** param [in]  enPin           IO Pin

 **

 ** retval en_result_t           Ok        設置成功

 **                                        其他值   設置失敗 ******************************************************************************/

en_result_t Gpio_SetIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)

{

    SetBit(((uint32_t)&M0P_GPIO->PABSET + enPort), enPin, TRUE);</font></p><p><font face="微軟雅黑" size="3">    return Ok;

}</font></p><p><font face="微軟雅黑" size="3">

</font></p><p><font face="微軟雅黑" size="3">/******************************************************************************

 ** brief GPIO IO清零

 **

 ** param [in]  enPort          IO Port

 ** param [in]  enPin           IO Pin

 **

 ** retval en_result_t           Ok        設置成功

 **                                         其他值  設置失敗 ******************************************************************************/

en_result_t Gpio_ClrIO(en_gpio_port_t enPort, en_gpio_pin_t enPin)

{

    SetBit(((uint32_t)&M0P_GPIO->PABCLR + enPort), enPin, TRUE);</font></p><p><font face="微軟雅黑" size="3">    return Ok;

}</font></p>

 

方法1是對整個PxOUT寄存器進行的操作,查看華大單片機用戶手冊關于此寄存器的說明; PxOUT寄存器對應位為1時,對應的引腳輸出高電平,反之輸出低電平。
   方法2是通過置位寄存器引腳對應位的置1完成引腳輸出高電平的操作,寄存器說明。

通過清零寄存器引腳對應位的置1完成引腳輸出低電平的操作,寄存器說明

如圖:

                                               

140827gc5uzut5xcdyx2m9.png


上述輸出不正常的現象是因為使用了方法1進行的操作。在主循環中對PA00輸出狀態的改變通過PAOUT寄存器來完成,假如PORTA所有引腳都為低電平時,讓PA00輸出高電平,方法1的操作是把0X0001寫入到PAOUT寄存器就可以實現。在ARM的匯編指令中要把0X0001寫入到PAOUT必須借助于通用寄存器 (r0~r7)來實現。當CPU剛完成0X0001移入到通用寄存器時,中斷發生,CPU會把通用寄存器保存起來,然后響應中斷,在中斷中PA01輸出高電平PAOUT值為0X0002,之后退出中斷。退出中斷后,CPU會恢復中斷之前通用寄存器的值(0X0001),再繼續把通用寄存器的值存入到PAOUT。這時PAOUT的值是0X0001,只有PA00輸出高電平,而PA01沒有輸出高電平。這種現象就是華大MCU端口使用時的競爭-冒險現象。
   在使用華大芯片的時候不希望這競爭-冒險現象出現,通過方法2的操作*可以避免此現象的出現。因為方法2是對寄存器的位進行操作,每次操作的時候只有對應的位進行置位或清零,其它位值為0的時候不影響輸出的結果 。
   建議大家在開發的時候對GPIO端口輸出操作時,使用方法2的方式來操作。



感興趣的產品PRODUCTS YOU ARE INTERESTED IN

智慧城市網 設計制作,未經允許翻錄必究 .? ? ? Copyright(C)?2021 http://www.cmr6829.com,All rights reserved.

以上信息由企業自行提供,信息內容的真實性、準確性和合法性由相關企業負責,智慧城市網對此不承擔任何保證責任。 溫馨提示:為規避購買風險,建議您在購買產品前務必確認供應商資質及產品質量。

會員登錄

×

請輸入賬號

請輸入密碼

=

請輸驗證碼

收藏該商鋪

登錄 后再收藏

提示

您的留言已提交成功!我們將在第一時間回復您~