Разработка, производство и продажа радиоэлектронной аппаратуры
|
Требуется программист в Зеленограде - обработка данных с датчиков; ColdFire; 40 тыс.
e-mail: jobsmp@pochta.ru
|
IAR for ARM 4.42.
Пример STR912-SK-IAR\uIP_webserver, файл STR912_enet.c
void tapdev_init(void) // инициализация Ethernet
{
volatile Int32U i;
GPIO_InitTypeDef GPIO_InitStructure;
EnetDmaTx.Tx.EnetTxSR.Valid = 0;
EnetDmaRx.Rx.EnetRxSR.Valid = 0;
// Init Sys
// Reset
SCU_AHBPeriphReset(__ENET,ENABLE);
// Clock enable
SCU_AHBPeriphClockConfig(__ENET,ENABLE);
// Reset release
SCU_AHBPeriphReset(__ENET,DISABLE);
// MII_PHYCLK Enable
SCU_PHYCLKConfig(ENABLE);
ENET_SCR_bit.SRESET = 1; // MAC DMA Software reset
// Assign pins to the MII interface
// Enable GPIO clocks
SCU_APBPeriphClockConfig(__GPIO0 | __GPIO1 | __GPIO5, ENABLE);
// Release GPIO reset
SCU_APBPeriphReset(__GPIO0 | __GPIO1 | __GPIO5, DISABLE);
// GPIO0 All pins Default Input function
GPIO_InitStructure.GPIO_Direction = GPIO_PinInput;
GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable;
GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
GPIO_Init(GPIO0, &GPIO_InitStructure); // Ошибка1! Эта функция выключает MII(default input)необходимый для работы Ethernet драйвера и включает альтернативные входы порта 0.
// GPIO1 0,5,6 inputs
GPIO_InitStructure.GPIO_Direction = GPIO_PinInput;
GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable;
GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0 | GPIO_Pin_5 | GPIO_Pin_6;
GPIO_Init(GPIO1, &GPIO_InitStructure);
// GPIO1 1,2,3,4,7 Push-Pull outputs Alt func 2
GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput;
GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull;
GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable; // Ошибка2! Этот параметр включает альтернативные входные функции хотя порты используются как выходы - тем самым делает невозможным использование этих функций вдальнейшем
GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt2;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 |\
GPIO_Pin_4 | GPIO_Pin_7;
GPIO_Init(GPIO1, &GPIO_InitStructure);
// GPIO5 2,3 Push-Pull outputs Alt func 2
GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput;
GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull;
GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Enable;//Ошибка2. Смотри выше
GPIO_InitStructure.GPIO_Alternate = GPIO_OutputAlt2;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_3;
GPIO_Init(GPIO5, &GPIO_InitStructure);
...
}
Дальше идет исправление ошибок при помощи новых ошибок!
файл drv_hd44780_I.c
void HD44780_IO_Init (void)
{
GPIO_InitTypeDef GPIO_InitStructure;
// Enable GPIO clocks
SCU_APBPeriphClockConfig(__GPIO8 | __GPIO9, ENABLE);
// Release GPIO reset
SCU_APBPeriphReset(__GPIO8 | __GPIO9, DISABLE);
// IO configure
SCU->GPIOEMI &= ~1;
SCU->GPIOTYPE[9] &= ~(LCD_RS | LCD_E | LCD_RW | LCD_LIGHT);
GPIO9->DDR |= LCD_RS | LCD_E | LCD_RW | LCD_LIGHT;
GPIO_InitStructure.GPIO_Direction = GPIO_PinOutput;
GPIO_InitStructure.GPIO_Type = GPIO_Type_PushPull;
GPIO_InitStructure.GPIO_IPConnected = GPIO_IPConnected_Disable;
GPIO_InitStructure.GPIO_Alternate = GPIO_InputAlt1;
GPIO_InitStructure.GPIO_Pin = LCD_DATA;
GPIO_Init(GPIO8, &GPIO_InitStructure); // Ошибка3 которая исправляет Ошибку1! Входной параметр GPIO8 является недопустимым для некоторых полей GPIO_InitStructure. Этот параметр меняет содержимое некоторых регистров GPIO0 - тем самым исправляет Ошибку1.
...
}
Составить ответ | Вернуться на конференцию.
Ответы