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

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

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

Ответ
 
Опции темы Опции просмотра
Старый 17.03.2017, 22:21   #1
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 30
Сообщений: 1,314
Вес репутации: 2626/57
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 вне форума   Ответить с цитированием
Старый 20.03.2017, 10:50   #2
Vint
Senior Member
 
Регистрация: 08.06.2007
Сообщений: 457
Вес репутации: 723/48
Vint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to beholdVint is a splendid one to behold
По умолчанию Re: pic32mx nvm

для 32mx есть прибамбас штабной
dee_emulation_pic32_v1_0_1.
Vint вне форума   Ответить с цитированием
Старый 20.03.2017, 11:10   #3
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 30
Сообщений: 1,314
Вес репутации: 2626/57
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
По умолчанию Re: pic32mx nvm

Vint
увы, никак не могу прокомментировать.
скорее всего этот пример все же вызывает те или иные вопросы.
ну или имеет зависимости аля plib/harmony.
besogon вне форума   Ответить с цитированием
Старый 20.03.2017, 11:31   #4
besogon
Senior Member
 
Регистрация: 12.07.2012
Возраст: 30
Сообщений: 1,314
Вес репутации: 2626/57
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
По умолчанию Re: pic32mx nvm

в пример не вставлены структуры и магические числа.
понятное дело, что они есть в datasheet по целевому pic.
как пример сброшу на всякий случай.
Код:
typedef struct {
	volatile uint32_t con;
	volatile uint32_t conclr;
	volatile uint32_t conset;
	volatile uint32_t coninv;
	volatile uint32_t key;
	unsigned :32;
	unsigned :32;
	unsigned :32;
	volatile uint32_t dstaddr;
	volatile uint32_t dstaddrclr;
	volatile uint32_t dstaddrset;
	volatile uint32_t dstaddrinv;
	volatile uint32_t data;
	unsigned :32;
	unsigned :32;
	unsigned :32;	
	volatile uint32_t srcaddr;
	unsigned :32;
	unsigned :32;
	unsigned :32;	
}pic32mx_nvm_t;

#define _NVMCON_LVDSTAT_P	0x0000000B
#define _NVMCON_LVDSTAT_M	0x00000800
#define _NVMCON_LVDSTAT_L	0x00000001

#define _NVMCON_LVDERR_P	0x0000000C
#define _NVMCON_LVDERR_M	0x00001000
#define _NVMCON_LVDERR_L	0x00000001

#define _NVMCON_WRERR_P		0x0000000D
#define _NVMCON_WRERR_M		0x00002000
#define _NVMCON_WRERR_L		0x00000001

#define _NVMCON_WREN_P		0x0000000E
#define _NVMCON_WREN_M		0x00004000
#define _NVMCON_WREN_L		0x00000001

#define _NVMCON_WR_P		0x0000000F
#define _NVMCON_WR_M		0x00008000
#define _NVMCON_WR_L		0x00000001

#define _NVMCON_NVMOP_P		0x00000000
#define _NVMCON_NVMOP_M		0x0000000f
#define _NVMCON_NVMOP_L		0x00000004

#define _NVMCON_WORD_WRITE_M	0x00000001
#define _NVMCON_ROW_WRITE_M	0x00000003
#define _NVMCON_PAGE_ERASE_M	0x00000004

...

#define MAGIC0	(0xAA996655)
#define MAGIC1	(0x556699AA)

#define _NVM_LOW_ADDRESS	0x1D000000
#define _SRAM_LOW_ADDRESS	0x00000000

...
pic32mx_nvm_t* const pic32mx_nvm = (pic32mx_nvm_t*)0xbf80f400;
...
extern pic32mx_nvm_t* const pic32mx_nvm;
#define PIC32MX_NVM	((pic32mx_nvm_t*)0xbf80f400)
скорее хотел сбросить, чтобы было легко что-нибудь найти, как отправную точку.
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, время: 23:15.


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