Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Вопросы начинающих

Вопросы начинающих Прежде чем задать вопрос, стоит воспользоваться поиском

 
 
Опции темы Опции просмотра
Prev Предыдущее сообщение   Следующее сообщение Next
Старый 17.03.2017, 22:21   #1
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 32
Сообщений: 2,110
Вес репутации: 3977/86
besogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond reputebesogon has a reputation beyond repute
По умолчанию pic32mx nvm

друг на работе 2 дня делал pic32mx flash programming. но постигла неудача. у него возникли серьезные затруднения в силу разных причин.

я решил написать код, чтобы уменьшить число затруднений при работе с nvm в pic32mx.

выложу под BSD , вроде бы рабочий, для типовых операций с flash.
в части erase нет проверки на исполнение в текущей странице.
этот вопрос гораздо лучше решать линкером, разместив все как надо.

для упрощения поиска запощу прямо еще кусок с write32. задрало искать нормальные простые примеры.
Код:
/**
 * burn new value to flash address
 * result value in flash cell is (current_value&set_value) 
 * @param virtual address
 * @param new_value
 * @return true on assign  
 */
__attribute__((leaf, noinline, nonnull(1))) bool nvm_write32(
							void* __restrict__ address,
							uint32_t new_value)
{
register uint32_t key0, key1, start_mask;
uint32_t phys_address;
	
	phys_address = ((uint32_t)address)&(0x1fffffff);
	
	if((phys_address >= _NVM_LOW_ADDRESS)&&
	(phys_address < (_NVM_LOW_ADDRESS + _FLASH_SIZE))&&
	(!(phys_address&0x03))){
		key0 = MAGIC0;
		key1 = MAGIC1;
		start_mask = _NVMCON_WR_M;
		pic32mx_nvm->con = _NVMCON_WORD_WRITE_M|_NVMCON_WREN_M;	
		LVD_WAR0;
		pic32mx_nvm->data = new_value;
		pic32mx_nvm->dstaddr = phys_address;
		__builtin_disable_interrupts();
		pic32mx_nvm->key = key0;
		pic32mx_nvm->key = key1;
		pic32mx_nvm->conset = start_mask;
		while(pic32mx_nvm->con&_NVMCON_WR_M);
		__builtin_enable_interrupts();
		LVD_WAR1;
		pic32mx_nvm->conclr =_NVMCON_WREN_M;	
		return (bool)(new_value == *((uint32_t*)address));
	}
	return false;
}
проверять с помощью
Код:
if(nvm_write32((void*)(&test_mas[temp]), 0)){
	__asm__("sdbbp");
}
тк. mplab очень серьезно дермирован в части отладки.

сорцы во вложении.
Вложения
Тип файла: zip pic32mx_nvm.zip (4.0 Кб, 3 просмотров)
besogon вне форума   Ответить с цитированием
 

Метки
pic32mx nvm flash rtsp


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
pic32mx core timer besogon Вопросы начинающих 6 26.11.2016 16:05
PIC32MX SD Card reader AleIv Продукция MICROCHIP 11 13.02.2015 15:19
PIC32mx перевести порт С в цифровой режим. Dmitriy_1000 Продукция MICROCHIP 1 21.09.2014 17:49
RTCC в PIC32MX Mahonja Продукция MICROCHIP 1 25.05.2010 11:08
Время выполнения инструкции PIC32MX gontharov Продукция MICROCHIP 6 17.05.2010 09:11


Часовой пояс GMT +3, время: 06:30.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot