shamray 0 6 апреля, 2009 Опубликовано 6 апреля, 2009 · Жалоба Как из программы ресетнуть Blackfin 532 так, чтобы запустился загрузчик и грузил прогу в соответствии с пинамми BMODE. Простой софтовый сброс не дает результата - загрузка не начинается. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fontp 0 6 апреля, 2009 Опубликовано 6 апреля, 2009 · Жалоба Только не смейтесь ;) Подключить какой-то флаг к пину ресет процессора с подтяжкой к 1. Флаги по умолчанию в третьем состоянии, т.е. можно считать в 1 Програмируем флаг на выход и прописываем туда 0. Процессор в экстазе, идет на перезагрузку и флаг сам молча становится по дефолту на ввод, т.е. ресет в 1, что и требовалось. Должно работать программным ресетом аналогичным аппаратному Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shamray 0 6 апреля, 2009 Опубликовано 6 апреля, 2009 · Жалоба Только не смейтесь ;) Подключить какой-то флаг к пину ресет процессора с подтяжкой к 1. Флаги по умолчанию в третьем состоянии, т.е. можно считать в 1 Програмируем флаг на выход и прописываем туда 0. Процессор в экстазе, идет на перезагрузку и флаг сам молча становится по дефолту на ввод. Должно работать программным ресетом аналогичным аппаратному Так не получится - плата изготовлена и менять ничего не хочется. Пробовал поступить как советуют в даташите "P0.L = LO( 0xFFC00100 );" /* SWRST register address */ "P0.H = HI( 0xFFC00100 );" "R0.L = 0x0007;" "W[P0] = R0;" "SSYNC;" /* Clear system soft reset */ "R0.L = 0x0000;" "W[P0] = R0;" "SSYNC;" /* Core reset - forces reboot */ "RAISE 1;" Не помогло - загрузка не начинается. Пробовал перейти по адресу бутлодера bootFuncPtr = (void (*)(void))0xEF000000; bootFuncPtr(); Появляется активность на SPI, но все затыкается после определения встроенным бутлодером таипа(разрядности) флешки. Куда копать пока не знаю... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Goblin_Nick 0 6 апреля, 2009 Опубликовано 6 апреля, 2009 · Жалоба взведите сторожевой и не обслуживайте его и будет вам счастье ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shamray 0 6 апреля, 2009 Опубликовано 6 апреля, 2009 · Жалоба Все, вопрос снимается. Все решено. section("program") static void res_HW(void * ptr) { cli(); // Clear all interrupts csync(); ssync(); asm( /* Issue system soft reset */ "P0.L = LO( 0xFFC00100 );" /* SWRST register address */ "P0.H = HI( 0xFFC00100 );" "R0.L = 0x0007;" "W[P0] = R0;" "SSYNC;" "SSYNC;" /* Clear system soft reset */ "R0.L = 0x0000;" "W[P0] = R0;" "SSYNC;" "P0.L = lo( 0xFFC00000 );" "P0.H = hi( 0xFFC00000 );" // PLL Control Register "R0 = 0x1400( Z );" // Restore default power-on state "W[P0] = R0;" "SSYNC;" "P0.L = lo( 0xFFC00004 );" "P0.H = hi( 0xFFC00004 );" // PLL DIV Control Register "R0 = 0x0005( Z );" // Restore default power-on state "W[P0] = R0;" "SSYNC;" "P0.L = lo( 0xFFC00A18 );" "P0.H = hi( 0xFFC00A18 );" // EBIU, SDRAM Refresh Rate Control Register "R0 = 0x081A(Z);" // Restore default power-on state "W[P0] = R0;" "SSYNC;" "P0.L = lo( 0xFFC00A14 );" "P0.H = hi( 0xFFC00A14 );" //EBIU, SDRAM Memory Bank Control Register "R0 = 0x0000(z);" // Restore default power-on state "W[P0] = R0;" "SSYNC;" "P0.L = lo( 0xFFC00A10 );" "P0.H = hi( 0xFFC00A10 );" //EBIU, SDRAM Memory Global Control Register "R0.L = 0x8849;" // Restore default power-on state "R0.H = 0xE008;" "[P0] = R0;" "SSYNC;" "RAISE 1;" ); } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Pathfinder 0 6 апреля, 2009 Опубликовано 6 апреля, 2009 · Жалоба На всякий случай, дело тут вот в чём. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
shamray 0 7 апреля, 2009 Опубликовано 7 апреля, 2009 · Жалоба На всякий случай, дело тут вот в чём. Спасибо, именно это мне и помогло ) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться