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

 
 
> Как настроить FSMC на адрес A16 ?
Memento Mori
сообщение May 11 2013, 21:12
Сообщение #1


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

Группа: Участник
Сообщений: 151
Регистрация: 1-10-12
Пользователь №: 73 751



Воюю с дисплеем на ILI9325.
Решил сменить библиотеку и дисплей перестал работать.
Это связано с тем, что библиотека была на FSMC 144 ногого камня, а у меня 100-ногий. Видимо я неправильно поправил код.

Библиотеки отличались синтаксисом работы с FSMC. Старая, рабочая:
CODE
#define Bank1_LCD_D ((uint32_t)0x60020000) //disp Data ADDR
#define Bank1_LCD_C ((uint32_t)0x60000000) //disp Reg ADDR


void LCD_WR_REG(unsigned int index)
{
*(__IO uint16_t *) (Bank1_LCD_C)= index;

}


void LCD_WR_CMD(unsigned int index,unsigned int val)
{
*(__IO uint16_t *) (Bank1_LCD_C)= index;
*(__IO uint16_t *) (Bank1_LCD_D)= val;
}

unsigned int LCD_RD_data(void){
unsigned int a=0;
a=*(__IO uint16_t *) (Bank1_LCD_D); //L

return(a);
}


void LCD_WR_Data(unsigned int val)
{
*(__IO uint16_t *) (Bank1_LCD_D)= val;
}

void LCD_WR_Data_8(unsigned int val)
{
*(__IO uint16_t *) (Bank1_LCD_D)= val;
}



Новая, с которой проблемы:
CODE
Библиотека была рассчинатана на 144 ногие корпуса

// for ~RS on address line a19
//#define LCD_BASE ((uint32_t)(0x60000000 | 0x0001fffe))
// for ~RS on address line a0
//#define LCD_BASE ((uint32_t)(0x60000000 | 0x00000000))


// А вот тут уже я подправил на адрес А16 - у меня корпус 100 ногий
#define LCD_BASE ((uint32_t)(0x60020000 | 0x00000000))
#define LCD ((LCD_TypeDef *)LCD_BASE)


void LCD_WriteReg(uint8_t LCD_Reg, uint16_t LCD_RegValue)
{
/* Write 16-bit Index, then Write Reg */
LCD->LCD_REG = LCD_Reg;
/* Write 16-bit Reg */
LCD->LCD_RAM = LCD_RegValue;
}

uint16_t LCD_ReadReg(uint8_t LCD_Reg)
{
volatile uint16_t i = 5;
/* Write 16-bit Index (then Read Reg) */
LCD->LCD_REG = LCD_Reg;
while(i--);
/* Read 16-bit Reg */
return (LCD->LCD_RAM);
}

void LCD_WriteRAM_Prepare(void)
{
LCD->LCD_REG = 0x0022;;
}

void LCD_WriteRAM(uint16_t RGB_Code)
{
/* Write 16-bit GRAM Reg */
LCD->LCD_RAM = RGB_Code;
}


Покопавшись, я пришел к выводу, что какой бы адрес регистра не задавался при чтении, всегда читается содержимое регистра по адресу 0x0000.

Где ошибка в программе?

Сообщение отредактировал IgorKossak - May 13 2013, 07:05
Причина редактирования: [codebox] для длинного кода, [code] - для короткого!!!
Go to the top of the page
 
+Quote Post



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

 


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


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