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

 
 
 
Reply to this topicStart new topic
> Запись во флэшь, по адресу, заданному переменной
Aptahar
сообщение Apr 21 2006, 12:02
Сообщение #1





Группа: Новичок
Сообщений: 3
Регистрация: 14-02-06
Пользователь №: 14 300



Надо:

typedef unsigned short int word;

void FLASH_WriteWord(word Adr, word Dat)
{

_BIC_SR(GIE);
while(FCTL3&BUSY == BUSY);

FCTL3 = FWKEY;
FCTL1 = FWKEY+WRT;

//Здесь надо записать Dat по адресу Adr

FCTL1 = FWKEY;
FCTL3 = FWKEY+LOCK;

_BIS_SR(GIE);
}

КАК??? без ассемблерной вставки можно? если нет, то как с ней?
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 21 2006, 12:27
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Дык а указатели в Си для чего придуманы?
Код
void FLASH_WriteWord(word Adr, word Dat)
{ word *pAdr=(word *)Adr;

  _BIC_SR(GIE);
  while(FCTL3&BUSY == BUSY);

  FCTL3 = FWKEY;         
  FCTL1 = FWKEY+WRT;         

*pAdr=Dat;

  FCTL1 = FWKEY;         
  FCTL3 = FWKEY+LOCK;     

  _BIS_SR(GIE);
}

А еще лучше, если бы вы сразу указатель в функцию передавали, а не значение. Потому что, если случайно переменная адреса Adr будет нечетным числом, то хрен знает куда ваша Dat запишется. Точнее понятно куда, с выравниваением по четному адресу.

Лучше будет вот так.
Код
void FLASH_WriteWord(word *pAdr, word Dat)
{
...
*pAdr=Dat;
...
}
Go to the top of the page
 
+Quote Post
iskrovec
сообщение Apr 24 2007, 15:22
Сообщение #3


Участник
*

Группа: Новичок
Сообщений: 45
Регистрация: 25-08-05
Пользователь №: 7 973



Есть вопрос. Если писать во flash как приведено ниже, то по дизассемблеру получается, что данные записываются в flash_add (по адресу переменной flash_add 0x06E6)? Или я не правильно понял?

flash_write(&flash_add,Data_to_flash);

void flash_write(word* address, word data) //
{
__bic_SR_register(GIE);
FCTL3 = FWKEY; // Unlock the flash.
FCTL1 = FWKEY | WRT; // Enable flash write.
*address = data; // Write the data to the flash.
FCTL1 = FWKEY; // Disable flash write.
FCTL3 = FWKEY | LOCK; // Lock the flash.
__bis_SR_register(GIE);
}// flash_write(word* address, data)

Дизассемблер:
flash_write(&flash_add,Data_to_flash);
0011AA 421E 06E8 mov.w &Data_to_flash,R14
0011AE 403C 06E6 mov.w #0x6E6,R12
0011B2 12B0 1F3A call #flash_write



flash_write:
001F3A C232 dint
FCTL3 = FWKEY; // Unlock the flash.
001F3C 40B2 A500 012C mov.w #0xA500,&FCTL3
FCTL1 = FWKEY | WRT; // Enable flash write.
001F42 40B2 A540 0128 mov.w #0xA540,&FCTL1
*address = data; // Write the data to the flash.
001F48 4E8C 0000 mov.w R14,0x0(R12)
FCTL1 = FWKEY; // Disable flash write.
001F4C 40B2 A500 0128 mov.w #0xA500,&FCTL1
FCTL3 = FWKEY | LOCK; // Lock the flash.
001F52 40B2 A510 012C mov.w #0xA510,&FCTL3
__bis_SR_register(GIE);
001F58 D232 eint
}// flash_write(word* address, data)
001F5A 4130 ret
Go to the top of the page
 
+Quote Post
rezident
сообщение Apr 24 2007, 16:39
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(iskrovec @ Apr 24 2007, 18:22) *
Есть вопрос. Если писать во flash как приведено ниже, то по дизассемблеру получается, что данные записываются в flash_add (по адресу переменной flash_add 0x06E6)? Или я не правильно понял?

Не совсем понятно что вы хотите? И какие именно значения передаете в функцию? Что такое flash_add и Data_to_flash?
Go to the top of the page
 
+Quote Post
rumit2000
сообщение Apr 24 2007, 18:01
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 175
Регистрация: 16-03-07
Из: Москва
Пользователь №: 26 228



А вон у TI же на все случаи жизни есть примеры
Прикрепленный файл  fet120_flash_write.txt ( 2.76 килобайт ) Кол-во скачиваний: 388


Сообщение отредактировал rumit2000 - Apr 24 2007, 18:02


--------------------
Быстро, Дёшево, Качественно-выбери любые 2 пункта
Go to the top of the page
 
+Quote Post
iskrovec
сообщение Apr 25 2007, 09:27
Сообщение #6


Участник
*

Группа: Новичок
Сообщений: 45
Регистрация: 25-08-05
Пользователь №: 7 973



Это я взял функцию из какого-то примера и полностью не разобрался. Там действительно в функцию передается адрес переменной flash_add (она расположена во flash). Мне надо n-слов сохранить во flash, как правильно это сделать?

Все, спасибо, разобрался по примеру.
Go to the top of the page
 
+Quote Post

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

 


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


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