📄 串口isp下载器avr910的 c 原代码.txt
字号:
putc(0x00);
}
/*--------------------------------------------------------------------------*/
/* 僨僶僀僗僼儔僌傪庢摼 */
/* unsigned char GetDeviceFlag(unsigned char device) */
/* device : 僨僶僀僗僐乕僪 */
/* <RETURN>: 僨僶僀僗僼儔僌(彂偒崬傒張棟惂屼僼儔僌) */
/*--------------------------------------------------------------------------*/
unsigned char GetDeviceFlag(unsigned char device)
{
unsigned char code;
unsigned char flag;
unsigned char i;
flag = 0;
for (i = 0; code = PRG_RDB(&device_info[i].code); i++) {
if (code == device) {
flag = PRG_RDB(&device_info[i].flag);
break;
}
}
return flag;
}
/*--------------------------------------------------------------------------*/
/* 彂偒崬傒傪僒億乕僩偟偰偄傞僨僶僀僗偐妋擣偡傞 */
/* unsigned char SupportedDevice(unsigned char device) */
/* device : 僨僶僀僗僐乕僪 */
/* <RETURN>: TRUE=僒億乕僩偟偰偄傞, FALSE=僒億乕僩偟偰偄側偄 */
/*--------------------------------------------------------------------------*/
unsigned char SupportedDevice(unsigned char device)
{
unsigned char code;
unsigned char i;
unsigned char rc;
rc = FALSE;
for (i = 0; code = PRG_RDB(&device_info[i].code); i++) {
if (code == device) {
rc = TRUE;
break;
}
}
return rc;
}
/*--------------------------------------------------------------------------*/
/* SPI 僋儘僢僋僷儖僗張棟 */
/* void SPI_Clock(void) */
/*--------------------------------------------------------------------------*/
void SPI_Clock(void)
{
delay(2);
sbi(PORTB, TARGET_SCK);
delay(5);
cbi(PORTB, TARGET_SCK);
delay(3);
}
/*--------------------------------------------------------------------------*/
/* SPI 彂偒崬傒張棟 */
/* unsigned char SPI_write(unsigned char c) */
/* c : 1僶僀僩偺SPI憲怣僨乕僞 */
/* <RETURN>: 憲怣帪偵庴怣偟偨1僶僀僩偺SPI庴怣僨乕僞 */
/*--------------------------------------------------------------------------*/
unsigned char SPI_write(unsigned char c)
{
unsigned char i, rx;
LED_On();
i = 0x80;
rx = 0x00;
do {
if (c & i) {
sbi(PORTB, TARGET_MOSI);
}
else {
cbi(PORTB, TARGET_MOSI);
}
if (bit_is_set(PINB, TARGET_MISO)) {
rx |= i;
}
SPI_Clock();
i >>= 1;
} while (i);
LED_Off();
return rx;
}
/*--------------------------------------------------------------------------*/
/* SPI 撉傒弌偟張棟 */
/* unsigned char SPI_read(void) */
/* <RETURN>: 1僶僀僩偺SPI庴怣僨乕僞 */
/*--------------------------------------------------------------------------*/
inline unsigned char SPI_read(void)
{
return SPI_write(0x00);
}
/*--------------------------------------------------------------------------*/
/* SPI 弶婜壔 */
/* void SPI_Init(int device) */
/* device : 僨僶僀僗僐乕僪 */
/*--------------------------------------------------------------------------*/
void SPI_Init(unsigned char device)
{
/* I/O億乕僩傪弶婜忬懺偵儕僙僢僩 */
outp(0xff, PORTD);
InitDDRD();
outp(0x00, PORTB); /* 慡偰偺弌椡僺儞傪LOW */
InitDDRB(); /* (偙偙偱僞乕僎僢僩儕僙僢僩偝傟傞)*/
/* 僨僶僀僗僐乕僪傪婎偵10斣僺儞偺婡擻傪慖戰偟丄僞乕僎僢僩偺揹尮傪搳擖 */
switch (device) {
case S1200A:
case S1200B:
case S1200C:
case S1200D:
case S2313A:
/* AT90S1200, AT90S1200A, AT90S2313 偼 10pin 偑GND */
sbi(PORTB, GND_SELECT); /* 10pin = GND, 20pin dev is selected */
cbi(PORTD, _20PIN_DET);
break;
case S4433A:
case S2333A:
case TN28:
case m8:
case m8b:
/* S4433A, S2333A, AT38, ATmega8, ATmega8b */
cbi(PORTD, _28PIN_DET); /* 28pin dev = H*/
break;
case S4414A:
case m8515:
case m8515b:
case m161:
case m161b:
case S4434:
case S8535:
case m32:
case m16:
case m16b:
/* S4414A, m8515/ b, m161/b,S4434,S8535,ATmega32,ATmega16/b, */
cbi(PORTD, _40PIN_DET); /* 40pin dev = H*/
break;
case S2323A:
case TN11:
case TN10:
case TN12:
case TN15:
/* S2323A, ATtiny11, ATtiny10, ATtiny12, ATtiny15 */
sbi(PORTB, _8PIN_H); /* 8pin dev = H*/
cbi(PORTD, _8PIN_DET); /* 8pin dev = H*/
break;
default:
/* 懠偼10pin 偑VCC偐SPI偵偼柍娭學 (Others='H') */
sbi(PORTB, VCC_SELECT); /* 10pin = VCC */
}
sbi(PORTB, VCC_ENABLE); /* Power On */
/* 儕僙僢僩偵惓僷儖僗傪擖傟偰妋幚偵SPI儌乕僪偵堏峴偡傞 */
wait_1ms(100); /* 100ms懸婡 */
SetReset();
wait_1ms(50); /* 50ms懸婡 */
ClrReset();
wait_1ms(100); /* 100ms懸婡 */
wait_1ms(50); /* 50ms懸婡 */
/* 僾儘僌儔儉嫋壜 */
if (0x20 <= device && device <= 0x7F) {
/* 僨僶僀僗僐乕僪 0x20乣0x7F 偼SPI捠怣偺摨婜偑昁梫 */
int i;
for (i = 0; i < 32; i++) { /* 嵟戝偱32夞傑偱帋峴偡傞 */
SPI_write(0xAC);
SPI_write(0x53);
if (SPI_write(0x00) == 0x53) {
SPI_write(0x00);
break;
}
SPI_write(0x00);
SPI_Clock();
}
}
else {
/* 僨僶僀僗僐乕僪 0x01乣0x1F 偼SPI捠怣偺摨婜傪偟側偄 */
/* 仸 AT90S1200宯偑奩摉偡傞偑僨乕僞僔乕僩偱偼摨婜偑昁梫側敜偩偑丄 */
/* 傾僾儕働乕僔儑儞僲乕僩偺avr910.asm偱偼摨婜偟偰偄側偄丅 */
/* 幚嵺偵帋偡偲丄摨婜傪峴偆偲媡偵捠怣弌棃側偄柾條丅 */
SPI_write(0xAC);
SPI_write(0x53);
SPI_write(0x00);
SPI_write(0x00);
}
wait_1ms(5); /* 5ms懸婡 */
}
/*--------------------------------------------------------------------------*/
/* 儊僀儞張棟 */
/* int main(void) */
/*--------------------------------------------------------------------------*/
int main(void)
{
unsigned char device = 0; /* 僨僶僀僗僐乕僪 */
unsigned char dev_flags = 0; /* 彂偒崬傒張棟惂屼僼儔僌 */
union U_ADDR {
unsigned short word;
unsigned char byte[2];
} addr; /* 彂偒崬傒傾僪儗僗抣儚乕僋 */
char twd_flash = TWD_FLASH;
char twd_eeprom = TWD_EEPROM;
addr.word = 0x0000; /* 彂偒崬傒傾僪儗僗傪0斣抧偵弶婜壔 */
/* 僴乕僪僂僃傾傪弶婜壔 */
LED_Off();
InitDDRB();
outp(0xff, PORTD);
InitDDRD();
InitUART();
InitTMR0();
/* 婲摦帪偺LED揰柵 */
LED_On();
wait_1ms(500);
LED_Off();
wait_1ms(500);
LED_On();
wait_1ms(500);
LED_Off();
/* 儊僀儞儖乕僾 */
while (1) {
char c, w, i;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -