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

hakain2

Members
  • Постов

    35
  • Зарегистрирован

  • Посещение

Контакты

  • ICQ
    582888880

Информация

  • Пол
    Мужчина
  • Город
    Екатеринбург

Электроника

  • Стаж в электронике
    Менее года

Посетители профиля

1 777 просмотров профиля
  • 3gi

  • Jxi

Достижения hakain2

Новобранец

Новобранец (2/14)

  • 10 постов на форуме
  • Неделя на форуме
  • Месяц на форуме
  • Год на форуме

Последние значки

0

Репутация

  1. Здравствуйте, Столкнулся с непонятной для меня проблемой запуска графического контроллера FT800 через 1986ВЕ1Т. Вся работа производится с отладочными платами LDM-HELPER-K1986BE1QI-FULL и VM800C43A-D. Среда программирования Keil 5. Работаю руководствуясь данной статьей и демонстрационным примером для ARM. После инициализации, управляющий конnроллер должен получить от FT800 идентификатор 0x7C, который говорит о том что инициализация прошла успешно и можно работать дальше. Проблема состоит в том, что ничего подобного он не получает. Я больше склоняюсь к тому, что неправильно настроил SPI, вследствие чего 1986ВЕ1Т шлет некорректные команды. Отладочная плата с FT800 работает, проверяли подключив к плате ардуино. Схема подключения на картинке, справа графический контроллер, слева 1986ВЕ1: 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;} //если не получаем данный идентификатор, то нету смысла продолжать дальше } При включении дисплей загорается белым цветом и больше ничего не происходит.
  2. Для чего нужны два последовательно соединенных диода в двухтактном усилителе? Читал что они задают напряжение смещения. Но почему их два? Почему не один?
×
×
  • Создать...