реклама на сайте
подробности

 
 
> U-boot, mini2440, nand
a1ien
сообщение Mar 23 2012, 20:06
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 2-02-11
Пользователь №: 62 660



Собственно добавляю потдержку в новый u-boot платы mini2440(процессор s3c2440).
Неполучается подружить nand flash. Вот что имеем в качестве вывода.
CODE
NAND: board_nand_init()
end of nand_init
hwcontrol(): 0xff 0x83
hwcontrol(): 0xffffffff 0x81
raise: Signal # 8 caught
raise: Signal # 8 caught
dev_ready
hwcontrol(): 0x90 0x83
hwcontrol(): 0x00 0x85
hwcontrol(): 0xffffffff 0x81
raise: Signal # 8 caught
raise: Signal # 8 caught
dev_ready
hwcontrol(): 0x90 0x83
hwcontrol(): 0x00 0x85
hwcontrol(): 0xffffffff 0x81
raise: Signal # 8 caught
raise: Signal # 8 caught
dev_ready
hwcontrol(): 0x90 0x83
hwcontrol(): 0x00 0x85
hwcontrol(): 0xffffffff 0x81
raise: Signal # 8 caught
raise: Signal # 8 caught
dev_ready
No NAND device found!!!

Как я понимаю проследил в отладке raise: Signal # 8 caught возникет где-то в таймере. Но из-за чего это может быть я незнаю. Может кто наставит на путь истины?

Может можно как-то узнать что не так в настройках таймера?

Сообщение отредактировал IgorKossak - Mar 26 2012, 07:23
Причина редактирования: [codebox]!!!
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
a1ien
сообщение Mar 25 2012, 20:13
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 21
Регистрация: 2-02-11
Пользователь №: 62 660



Так вот что я накопал. Может мне теперь смогут помочь.
Вся проблемма начинается аж самой инициализации.
Первой сишной функцией которая вызывается является board_init_f она выполняется еше во флеше в ней происходит вся основная инициализация, и таймеров в том числе.
Тоесть вызывается вот такая функция.
Цитата
int timer_init(void)
{
struct s3c24x0_timers *timers = s3c24x0_get_base_timers();
ulong tmr;

/* use PWM Timer 4 because it has no output */
/* prescaler for Timer 4 is 16 */
writel(0x0f00, &timers->tcfg0);
if (timer_load_val == 0) {
/*
* for 10 ms clock period @ PCLK with 4 bit divider = 1/2
* (default) and prescaler = 16. Should be 10390
* @33.25MHz and 15625 @ 50 MHz
*/
timer_load_val = get_PCLK() / (2 * 16 * 100);
timer_clk = get_PCLK() / (2 * 16);
}
/* load value for 10 ms timeout */
lastdec = timer_load_val;
writel(timer_load_val, &timers->tcntb4);
/* auto load, manual update of timer 4 */
tmr = (readl(&timers->tcon) & ~0x0700000) | 0x0600000;
writel(tmr, &timers->tcon);
/* auto load, start timer 4 */
tmr = (tmr & ~0x0700000) | 0x0500000;
writel(tmr, &timers->tcon);
timestamp = 0;

return (0);
}

Тут надо обратить внимание на timer_load_val и на timer_clk.
Эти переменные оказываются почемуто во флеше.
Тоесть напрмер адресс переменной timer_load_val = 0x52600(флеш мапиться по нулевому адресу)
И вовремя работы программы они естественно не меняются.
А если еще и посмотреть бинарник которые прошиваю(и который создается во время сборки убута) то по адресу 0x52600 мы увидим нашу будующую переменную и притом отличную от 0.

Внимание вопрос что я не так делаю. Ведь этот код относиться не к конкретно моей плате и даже не конкретно моему процессору, и код верный.

Собственно дальше из-за этого кода все у меня и не работает. Так-как значения переменной равняется в моем случае 0x17 что по логике вобще не врно и естественно дальше все работает соверенно не так.

ЗЫ. Переменные обявленны как ,
Код
int timer_load_val = 0;
static ulong timer_clk;

Моежт это всетаки косяк. Потому как очень странно выглядит такое обявление глобальных переменных.

Сообщение отредактировал a1ien - Mar 25 2012, 20:26
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 31st July 2025 - 12:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01372 секунд с 7
ELECTRONIX ©2004-2016