Использую PackBits. На машине упаковка и распаковка работают нормально. При программировании AVR, тестовый у ПЛИС светодиод не мигает, т.е. ПЛИС программируется неправильно.
В чём может быть дело?
Процедура программирования ПЛИС несжатой прошивкой.
Код
void FPGA_sendfile(uint_farptr_t buf, uint32_t buf_len)
{
unsigned char i;
uint32_t l;
uint8_t c;
for (l = 0; l < buf_len; l ++) // buf_len-1
{
c = pgm_read_byte_far(buf + l);
for (i = 0;i < 8;i ++)
{
if ((c & 0x80)>0) SET_XSP_DIN;
else CLEAR_XSP_DIN;
CLEAR_XSP_CLK;
c<<=1;
SET_XSP_CLK;
}
}
SET_XSP_DIN;
}
Процедура программирования ПЛИС сжатой прошивкой.
Код
void FPGA_sendpackedfile(uint_farptr_t buf, uint32_t buf_len)
{
unsigned char i;
uint32_t L;
// uint8_t c;
int32_t countChar; /* run/copy count */
uint8_t c; /* current character */
L = - 1;
while(L <= buf_len - 1) // - 2?
{
L += 1;
countChar = (int32_t) pgm_read_byte_far(buf + L);
if (countChar < 0)
{
/* we have a run write out 2 - countChar copies */
countChar = (MIN_RUN - 1) - countChar;
L += 1;
while (countChar > 0)
{
c = pgm_read_byte_far(buf + L);
for (i = 0;i < 8;i ++)
{
if ((c & 0x80)>0) SET_XSP_DIN;
else CLEAR_XSP_DIN;
CLEAR_XSP_CLK;
c <<= 1;
SET_XSP_CLK;
}
countChar--;
}
}
else
{
/* we have a block of countChar + 1 symbols to copy */
for (countChar++; countChar > 0; countChar--)
{
L += 1;
c = pgm_read_byte_far(buf + L);
for (i = 0; i < 8; i ++)
{
if ((c & 0x80)>0) SET_XSP_DIN;
else CLEAR_XSP_DIN;
CLEAR_XSP_CLK;
c <<= 1;
SET_XSP_CLK;
}
}
}
}
SET_XSP_DIN;
}
Не пойму, где тут мог намудрить. Я прикрепил проект для тестирования упаковки/распаковки на инструментальной системе и проект для программирования целевой. Буду благодарен за советы и помощь.