📄 串口isp下载器avr910的 c 原代码.txt
字号:
//#define TN22 ?? /* ATtiny22 */
#define DEV_PAGE (1<<4) /* 儁乕僕彂偒崬傒僨僶僀僗 */
#define DEV_TWD0 (0<<0) /* 昗弨 */
#define DEV_TWD1 (1<<0) /* 媽mega僔儕乕僘(603/103傪彍偔)*/
#define DEV_TWD2 (2<<0) /* mega603/103 */
#define DEV_TWD3 (3<<0) /* 怴mega僔儕乕僘 */
/* twd=0: 昗弨偺師埵抲彂偒崬傒懸婡帪娫 wait time for next writing */
#define TWD_ERASE 20 /* 僠僢僾徚嫀偵梫偡傞帪娫=18ms */
#define TWD_FLASH 10 /* 僼儔僢僔儏彂偒崬傒偵梫偡傞帪娫=9ms */
#define TWD_EEPROM 10 /* EEPROM彂偒崬傒偵梫偡傞帪娫=9ms */
/* twd=1: mega僔儕乕僘偺師埵抲彂偒崬傒懸婡帪娫 wait time for next writing */
#define TWD_ERASE_MEGA 32 /* 僠僢僾徚嫀偵梫偡傞帪娫=30ms */
#define TWD_FLASH_MEGA 16 /* 僼儔僢僔儏彂偒崬傒偵梫偡傞帪娫=15ms */
#define TWD_EEPROM_MEGA 10 /* EEPROM彂偒崬傒偵梫偡傞帪娫=3.8ms */
/* twd=2: mega603/103偺師埵抲彂偒崬傒懸婡帪娫 wait time for next writing */
#define TWD_ERASE_M103 120 /* 僠僢僾徚嫀偵梫偡傞帪娫=112ms */
#define TWD_FLASH_M103 60 /* 僼儔僢僔儏彂偒崬傒偵梫偡傞帪娫=56ms */
#define TWD_EEPROM_M103 10 /* EEPROM彂偒崬傒偵梫偡傞帪娫=9ms */
/* twd=3: new AVR僔儕乕僘偺師埵抲彂偒崬傒懸婡帪娫 wait time for next writing */
#define TWD_ERASE_NEW 10 /* 僠僢僾徚嫀偵梫偡傞帪娫=9ms */
#define TWD_FLASH_NEW 5 /* 僼儔僢僔儏彂偒崬傒偵梫偡傞帪娫=4.5ms */
#define TWD_EEPROM_NEW 10 /* EEPROM彂偒崬傒偵梫偡傞帪娫=9ms */
typedef struct DEV_INFO {
char code;
char flag;
} DEV_INFO;
const DEV_INFO __ATTR_PROGMEM__ device_info[] = {
{ TN12, DEV_TWD0 }, /* ATtiny12 */
{ TN15, DEV_TWD0 }, /* ATtiny15 */
{ TN26, DEV_TWD3|DEV_PAGE }, /* ATtiny26 */
{ S1200D, DEV_TWD0 }, /* AT90S1200/A rev.D */
{ S2313A, DEV_TWD0 }, /* AT90S2313 */
{ S4414A, DEV_TWD0 }, /* AT90S4414 */
{ S8515A, DEV_TWD0 }, /* AT90S8515 */
{ S2323A, DEV_TWD0 }, /* AT90S2323 */
{ S2343A, DEV_TWD0 }, /* AT90S2343 */
{ S2333A, DEV_TWD0 }, /* AT90S2333 */
{ S4433A, DEV_TWD0 }, /* AT90S4433 */
{ S4434, DEV_TWD0 }, /* AT90S4434 */
{ S8535, DEV_TWD0 }, /* AT90S8535 */
{ m83, DEV_TWD1|DEV_PAGE }, /* ATmega83 */
{ m161, DEV_TWD1|DEV_PAGE }, /* ATmega161 */
{ m163, DEV_TWD1|DEV_PAGE }, /* ATmega163 */
{ m603, DEV_TWD2|DEV_PAGE }, /* ATmega603 */
{ m103, DEV_TWD2|DEV_PAGE }, /* ATmega103 */
{ m8, DEV_TWD3|DEV_PAGE }, /* ATmega8 */
{ m16, DEV_TWD3|DEV_PAGE }, /* ATmega16 */
{ m32, DEV_TWD3|DEV_PAGE }, /* ATmega32 */
{ m128, DEV_TWD3|DEV_PAGE }, /* ATmega128 */
{ m8515, DEV_TWD3|DEV_PAGE }, /* ATmega8515 */
{ 0x00, 0 }
};
/*--------------------------------------------------------------------------*/
/* Reset to High */
/* void SetReset(void) */
/*--------------------------------------------------------------------------*/
inline void SetReset(void)
{
sbi(PORTB, TARGET_RESET);
}
/*--------------------------------------------------------------------------*/
/* Reset to low */
/* void ClrReset(void) */
/*--------------------------------------------------------------------------*/
inline void ClrReset(void)
{
cbi(PORTB, TARGET_RESET);
}
/*--------------------------------------------------------------------------*/
/* turn LED on */
/* void LED_On(void) */
/*--------------------------------------------------------------------------*/
inline void LED_On(void)
{
sbi(PORTD, MON_LED);
}
/*--------------------------------------------------------------------------*/
/* turn LED on */
/* void LED_Off(void) */
/*--------------------------------------------------------------------------*/
inline void LED_Off(void)
{
cbi(PORTD, MON_LED);
}
/*--------------------------------------------------------------------------*/
/* PortD direction setting */
/* void InitDDRD(void) */
/*--------------------------------------------------------------------------*/
inline void InitDDRD(void)
{
outp(BV(MON_LED)|BV(_8PIN_DET)|BV(_20PIN_DET)
|BV(_28PIN_DET)|BV(_40PIN_DET), DDRD);
}
/*--------------------------------------------------------------------------*/
/* PortD clr _28PIN_DET, clr _40PIN_DET when finish promming mode */
/* void rst2840pin_det(void) */
/*--------------------------------------------------------------------------*/
inline void rst2840pin_det(void)
{
sbi(PORTD, _8PIN_DET);
sbi(PORTD, _20PIN_DET);
sbi(PORTD, _28PIN_DET);
sbi(PORTD, _40PIN_DET);
}
/*--------------------------------------------------------------------------*/
/* PortB direction setting */
/* void InitDDRB(void) */
/*--------------------------------------------------------------------------*/
inline void InitDDRB(void)
{
outp(0xFF ^ BV(TARGET_MISO), DDRB);
}
/*--------------------------------------------------------------------------*/
/* PortB set to "input" except RESET Port. */
/* void ReleaseDDRB(void) */
/* 仸僞乕僎僢僩傪儕僙僢僩偟偰偄側偄帪偵弌椡偑徴撍偡傞偺傪夞旔偡傞偨傔 */
/*--------------------------------------------------------------------------*/
inline void ReleaseDDRB(void)
{
outp(BV(TARGET_RESET), PORTB);
outp(BV(TARGET_RESET), DDRB);
}
/*--------------------------------------------------------------------------*/
/* UART initial setting (19200bps) */
/* void InitUART(void) */
/*--------------------------------------------------------------------------*/
void InitUART(void)
{
outp((SYSCLK/(19200*16L)-1), UBRR);
outp(BV(TXEN)|BV(RXEN), UCR);
}
/*--------------------------------------------------------------------------*/
/* 僞僀儅#0 弶婜壔 (SYSCLK/8 = 4MHz/8 = 500KHz = 2us廃婜) */
/* void InitTMR0(void) */
/*--------------------------------------------------------------------------*/
void InitTMR0(void)
{
/* CS02, CS01, CS00 = 010 = 僾儕僗働乕儔傪 CK/8 偵愝掕 */
outp(BV(CS01),TCCR0);
}
/*--------------------------------------------------------------------------*/
/* 僞僀儅#0 傪棙梡偟偨僨傿儗僀張棟 */
/* void delay(int t) */
/* t : 帪掕悢(SYSCLK=4MHz帪丄8us扨埵) */
/*--------------------------------------------------------------------------*/
void delay(int t)
{
outp(256-t*4, TCNT0);
outp(BV(TOV0), TIFR);
while (!(inp(TIFR) & BV(TOV0))) ;
}
/*--------------------------------------------------------------------------*/
/* 僞僀儅#0 傪棙梡偟偨100us扨埵偺僨傿儗僀張棟 */
/* void wait_100us(int t) */
/* t : 帪掕悢(100us扨埵) */
/*--------------------------------------------------------------------------*/
void wait_100us(int t)
{
while (t) {
outp(256-((SYSCLK/80000)-1), TCNT0);
outp(BV(TOV0), TIFR);
while (!(inp(TIFR) & BV(TOV0)));
t--;
}
}
/*--------------------------------------------------------------------------*/
/* 僞僀儅#0 傪棙梡偟偨1ms扨埵偺僨傿儗僀張棟 */
/* void wait_1ms(int t) */
/* t : 帪掕悢(1ms扨埵) */
/*--------------------------------------------------------------------------*/
void wait_1ms(int t)
{
while (t) {
wait_100us(10);
t--;
}
}
/*--------------------------------------------------------------------------*/
/* UART傊1僶僀僩憲怣 */
/* void putc(unsigned char c) */
/* c : 憲怣偡傞僨乕僞 */
/*--------------------------------------------------------------------------*/
void putc(unsigned char c)
{
while (!(inp(USR) & BV(UDRE))) ; /* 憲怣壜偵側傞偺傪懸偮 */
outp(c, UDR);
}
/*--------------------------------------------------------------------------*/
/* UART偐傜1僶僀僩庴怣 */
/* unsigned char getc(void) */
/* <RETURN>: 庴怣偟偨僨乕僞 */
/*--------------------------------------------------------------------------*/
unsigned char getc(void)
{
while (!(inp(USR) & BV(RXC))) ; /* 僨乕僞庴怣懸偪 */
return (inp(UDR));
}
/*--------------------------------------------------------------------------*/
/* 僾儘僌儔儉嬻娫偺暥帤楍傪憲怣 */
/* void send_pstr(const char *flash) */
/* flash : 暥帤楍僨乕僞偺FLASH ROM嬻娫忋偺傾僪儗僗抣 */
/*--------------------------------------------------------------------------*/
void send_pstr(const char *flash)
{
unsigned char c;
while ((c = PRG_RDB(flash)) != 0) {
putc(c);
flash++;
}
}
/*--------------------------------------------------------------------------*/
/* 彂偒崬傒傪僒億乕僩偟偰偄傞僨僶僀僗偺儕僗僩傪憲怣 */
/* void send_device_codes(void) */
/*--------------------------------------------------------------------------*/
void send_device_codes(void)
{
unsigned char code;
unsigned char i;
for (i = 0; code = PRG_RDB(&device_info[i].code); i++) {
putc(code);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -