Перейти к содержанию

Микроконтроллер 1986Ве1Т И Графический Контроллер Ft800(Связь Через Spi)


Рекомендуемые сообщения

Здравствуйте,

Столкнулся с непонятной для меня проблемой запуска графического контроллера FT800 через 1986ВЕ1Т.

Вся работа производится с отладочными платами LDM-HELPER-K1986BE1QI-FULL и VM800C43A-D. Среда программирования Keil 5.

Работаю руководствуясь данной статьей и демонстрационным примером для ARM.

После инициализации, управляющий конnроллер должен получить от FT800 идентификатор 0x7C, который говорит о том что инициализация прошла успешно и можно работать дальше. Проблема состоит в том, что ничего подобного он не получает. Я больше склоняюсь к тому, что неправильно настроил SPI, вследствие чего 1986ВЕ1Т шлет некорректные команды.

Отладочная плата с FT800 работает, проверяли подключив к плате ардуино.

Схема подключения на картинке, справа графический контроллер, слева 1986ВЕ1:

f2f8da497dee.jpg

void SPI1_Init(void)			 //инициализация SPI
{
 SSP_InitTypeDef SSP_InitStructure;
 PORT_InitTypeDef GPIO_user_ini;
 RST_CLK_PCLKcmd(PCLK_BIT(MDR_SSP1_BASE), ENABLE);
 RST_CLK_PCLKcmd(RST_CLK_PCLK_PORTC , ENABLE);
 GPIO_user_ini.PORT_Pin = PORT_Pin_5 | PORT_Pin_6 | PORT_Pin_7;
 GPIO_user_ini.PORT_FUNC = PORT_FUNC_ALTER;
 GPIO_user_ini.PORT_MODE = PORT_MODE_DIGITAL;
 GPIO_user_ini.PORT_SPEED = PORT_SPEED_SLOW;
 GPIO_user_ini.PORT_OE = PORT_OE_OUT;
 PORT_Init(MDR_PORTC, &GPIO_user_ini);
 SSP_DeInit(MDR_SSP1);
 SSP_BRGInit(MDR_SSP1, SSP_HCLKdiv1);
 SSP_InitStructure.SSP_SCR = 0x10;
 SSP_InitStructure.SSP_CPSDVSR = 12;
 SSP_InitStructure.SSP_Mode = SSP_ModeMaster;
 SSP_InitStructure.SSP_WordLength = SSP_WordLength8b;
 SSP_InitStructure.SSP_SPH = SSP_SPH_1Edge;
 SSP_InitStructure.SSP_SPO = SSP_SPO_Low;
 SSP_InitStructure.SSP_FRF = SSP_FRF_SPI_Motorola;
 SSP_InitStructure.SSP_HardwareFlowControl = SSP_HardwareFlowControl_SSE;
 SSP_Init(MDR_SSP1, &SSP_InitStructure);
 SSP_ITConfig(MDR_SSP1, SSP_IT_RX | SSP_IT_RT | SSP_IT_TX | SSP_IT_ROR, ENABLE);
 SSP_Cmd(MDR_SSP1, ENABLE);
}
void ft800cmdWrite(unsigned char ftCommand) //функция для отправки команды по SPI
{
 unsigned char cZero = 0x00;
 CS_RESET;
 SSP_SendData(MDR_SSP1, ftCommand); // Отправляем команду
 SSP_SendData(MDR_SSP1, cZero);	 // Отправляем первый нулевой байт
 SSP_SendData(MDR_SSP1, cZero);	 // Отправляем второй нулевой байт
 //CS_SET; // тут почему то когда перевожу CS на высокий уровень, ничего не работает, и дисплей не включается
}
//---------------------------------------*
unsigned char ft800memRead8(unsigned long ftAddress)	 // Здесь происходит чтение идентификатора REG ID для проверки корректного завершения этапа инициализации
{
 unsigned char ftData8 = ZERO;	 // Place-holder for 8-bits being read
 unsigned char cTempAddr[3];	 // FT800 Memory Address
 unsigned char cZeroFill = ZERO;	 // Dummy byte
 cTempAddr[2] = (char) (ftAddress >> 16) | MEM_READ;	 // Compose the command and address to send
 cTempAddr[1] = (char) (ftAddress >> 8); // middle byte
 cTempAddr[0] = (char) (ftAddress); // low byte
 CS_RESET;		 // Set chip select low
 for (i = 2; i >= 0; i--)
 {
	 SSP_SendData(MDR_SSP1, cTempAddr[i]); // Send Memory Write plus high address byte
 }
 SSP_SendData(MDR_SSP1, cZeroFill); // Send dummy byte
 for (j = 0; j < sizeof(ftData8); j++)	 // Start with least significant byte
 {
	 while (SSP_GetFlagStatus(MDR_SSP1, SSP_FLAG_BSY) == 1){}
	 if (SSP_GetFlagStatus(MDR_SSP1, SSP_FLAG_RNE) == 1)
	 {
	 ftData8 = SSP_ReceiveData(MDR_SSP1); // Receive data byte
	 }
 }
 CS_SET;						 // Set chip select high
 return ftData8;		 Return 8-bits
}
//---------------------------------------------------------
//---------------------------------------------------------
//Тут начинается основная программа.
Init_PORT_INT_PD();	 //Инициализация портов PD, CS, INT//
SPI1_Init();	 //Инициализация SPI
PD_SET;			 // формируем
delay_ms(20);	 // импульс
PD_RESET;	 // длительностью
delay_ms(20);	 // 20 мс
PD_SET;	 // в активном режиме на линии PD всегда высокий уровень
			 // Дисплей включается и без формирования этого импульса, главное
			 // что бы в PD оставался высокий уровень
ft800cmdWrite(FT800_ACTIVE);	 // тут шлем команды FT800_ACTIVE = 0х00,
delay_ms(5);						 // FT800_CLKEXT = 0x44
ft800cmdWrite(FT800_CLKEXT);	 // FT800_CLK48M = 0x62
delay_ms(5);						 // между ними 5 мс для того чтобы FT800
ft800cmdWrite(FT800_CLK48M);	 // обрабатывать команды
delay_ms(5);
if (ft800memRead8(REG_ID) != 0x7C) // чтение идентификатора REG ID для проверки корректного завершения этапа инициализации
{
 while(1) {LED0_ON;} //если не получаем данный идентификатор, то нету смысла продолжать дальше
}

При включении дисплей загорается белым цветом и больше ничего не происходит.

c60199147911.jpg

Ссылка на комментарий
Поделиться на другие сайты

  • 8 месяцев спустя...

Реклама: ООО ТД Промэлектроника, ИНН: 6659197470, Тел: 8 (800) 1000-321

20% скидка на весь каталог электронных компонентов в ТМ Электроникс!

Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!

Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!

Перейти на страницу акции

Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849

Присоединяйтесь к обсуждению

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

Гость
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Ответить в этой теме...

×   Вставлено с форматированием.   Восстановить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...