LD7032的測試版上面放了ATMega328與MSP430FR5739,OLED要吃一個15v的電壓與Drive IC吃5v兩個電壓,15v升壓可以參考下面電路。基本上與對岸出的demo board一樣,這東西唯一麻煩的是connector不是普通的FPC而且超難焊很容易融化...插拔幾次後金手指就接觸不良了...,
Search
2016年8月18日 星期四
2014年7月8日 星期二
Arduino WDT ISR
用AVR C Library有wdt_enable & wdt_disable這兩個Function,他們會用cli清除中斷Flag,所以timer0會被影響因此delay在註冊的WDT ISR會失效只要記得在裡面用sei即可,WDTCSR暫存器除了Set WDE Flag外也要Set WDIE Flag才會在Intterup時進行中斷Jmp到註冊的ISR,若只有Set WDE intterup時會直接Reset,Reference Page54~56 & Table 10-1。
wdt_enable:
wdt_disable:
wdt_reset:
wdt_enable:
#define wdt_enable (value)
__asm__ __volatile__ ( \
"in __tmp_reg__,__SREG__" "\n\t" \
"cli" "\n\t" \
"wdr" "\n\t" \
"out %0,%1" "\n\t" \
"out __SREG__,__tmp_reg__" "\n\t" \
"out %0,%2" \
: /* no outputs */ \
: "I" (_SFR_IO_ADDR(_WD_CONTROL_REG)), \
"r" (_BV(_WD_CHANGE_BIT) | _BV(WDE)), \
"r" ((uint8_t) ((value & 0x08 ? _WD_PS3_MASK : 0x00) | \
_BV(WDE) | (value & 0x07)) ) \
: "r0" \
)
wdt_disable:
#define wdt_disable ()
__asm__ __volatile__ ( \
"in __tmp_reg__, __SREG__" "\n\t" \
"cli" "\n\t" \
"out %0, %1" "\n\t" \
"out %0, __zero_reg__" "\n\t" \
"out __SREG__,__tmp_reg__" "\n\t" \
: /* no outputs */ \
: "I" (_SFR_IO_ADDR(_WD_CONTROL_REG)), \
"r" ((uint8_t)(_BV(_WD_CHANGE_BIT) | _BV(WDE))) \
: "r0" \
)
wdt_reset:
#define wdt_reset () __asm__ __volatile__ ("wdr")
訂閱:
文章 (Atom)

