如何在C中使用mspgcc
啓用和禁用(清除並設置GIE
SR
位)?如何使用C啓用/禁用mspgcc中的中斷?
0
A
回答
3
/*interrupt.c
[email protected]
GPL
*/
#include <msp430g2553.h>
#define LED1 BIT0
#define LED2 BIT6
#define BUTTON BIT3
volatile unsigned int i;//to prevent optimization
void main(void)
{
WDTCTL=WDTPW+WDTHOLD;
P1DIR |= (LED1+LED2);//
P1OUT &= ~(LED1+LED2);
P1IE |= BUTTON;
P1IFG &= ~BUTTON;
//__enable_interrupt();//enable all interrupts
_BIS_SR(LPM4_bits+GIE);
for(;;)
{}
}
//port1 interrupt service routine
#pragma vector=PORT1_VECTOR
__interrupt void Port_1(void)
{
P1OUT ^= (LED1+LED2);
P1IFG &= ~BUTTON;
P1IES ^= BUTTON;
}
1
您可以使用__eint()/ __dint()內聯函數:
#include <intrinsics.h>
...
__eint();
/* Interrupts enabled */
__dint();
/* Interrupts disabled */
或者你可以使用__bis_status_register()/ __bic_status_register()內聯函數:
#include <msp430.h>
#include <intrinsics.h>
...
__bis_status_register(GIE);
/* Interrupts enabled */
__bic_status_register(GIE);
/* Interrupts disabled */
或一intrinsics.h中的許多其他兼容性定義。請注意,還有一些特殊版本,例如__bis_status_register_on_exit()/ __bic_status_register_on_exit(),它將在從ISR退出時更改標誌的狀態。
0
通過實驗我發現它可以啓用_BIS_SR(GIE);
並禁用_BIC_SR(GIE);
而不包括除標準msp430g2553.h
文件之外的任何內容。
相關問題
- 1. 如何使用C#啓用/禁用Cisco Catalyst 2960中的端口?
- 2. 如何禁用/啓用stm32f107芯片上的中斷?
- 3. 如何在Mspgcc中聲明一箇中斷處理程序(ISR)?
- 4. 如何在Linux中禁用中斷
- 5. 在C中禁用並啓用按鈕#
- 6. 如何在HTML中禁用/啓用?
- 7. 如何在primefaces中啓用/禁用使用jQuery的複選框?
- 8. 如何在imx6q中啓用UART中斷?
- 9. 禁用全部後啓用選定的斷點(visual studio C++ 2010)
- 10. 如何使用C#啓用/禁用計劃任務?
- 11. 用C#啓用/禁用MSCONFIG啓動項
- 12. 如何在Eclipse中禁用Scala斷言?
- 13. 啓用和禁用ListView項目不斷
- 14. C# - 網卡禁用/啓用
- 15. 在Windows中使用C#啓用/禁用硬件設備
- 16. 是否可以在Visual Studio中啓用禁用的斷點
- 17. 綁定NSMenuItem的標題中斷啓用/禁用驗證
- 18. 如何啓用/禁用圖像按鈕使用ID在jQuery中?
- 19. 如何在ASP.NET webforms中使用FormsAuthentication時禁用或啓用Cookie?
- 20. 如何在定時器中使用javascript啓用/禁用div
- 21. 如何啓用/禁用NSToolbarItem
- 22. 如何啓用/禁用JEditable
- 23. 禁用中斷時中斷boost :: thread
- 24. Visual C++:斷點禁用
- 25. 在目標中啓用斷言c
- 26. 如何在Java中啓用斷言
- 27. 如何在Appcelerator中啓用斷點
- 28. 如何在Eclipse v3.7.2中啓用斷言
- 29. 如何在Tomcat中啓用java斷言
- 30. 在用SBT構建的jar中禁用斷言,但在測試中啓用?
可能重複的例子:http://stackoverflow.com/q/47981/694733 – user694733
@ user694733:不重複。通常不使用簡單的按位運算符來訪問MSP430中的GIE SR位,因爲在C中沒有定義代表狀態寄存器的符號。 – tinman
這不是重複的狀態寄存器(SR)是一個處理器寄存器,而不是一個正常的內存映射寄存器。我找到了解決辦法,見下文。 – tylerjw