Для выполнения практической работы потребуется отладочная плата 1986EvBrd_48_Rev3.
В этой практической работе дан пример реализации мигания двумя светодиодами, которые расположены на отладочной плате.
Проект состоит из двух файлов. Один из них написан на языке ассемблер, другой на языке си.
1
2
3
4
5
AREA RESET, DATA, READONLY
IMPORT main
DCD 0x20008000 ; Вершина стека
DCD main ; Выполнение программы main
END
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
/*-----------------------------------------------*/
/* Практическая работа 01 (мигание светодиодами) */
/*-----------------------------------------------*/
/* Определение структуры порта */
typedef struct {
unsigned RXTX;
unsigned OE;
unsigned FUNC;
unsigned DIGITAL;
unsigned PULL;
unsigned PD;
unsigned PWR;
unsigned GFEN;
}struct_ports;
/* Определение функции задержки времени */
void delay(unsigned count){
while(count--);
}
int main (void) {
/* Включение тактирования порта F */
*(unsigned *)(0x4002001C) |= (1<<29);
/*-----------------------------------------------------------*/
/* Настройка порта F (Смотри описание портов ввода вывода) */
/*-----------------------------------------------------------*/
/* RXTX - Данные порта: */
/* OE - Направление порта: */
/* 1 - выход, */
/* 0 - вход */
/* FUNC - Режим работы порта: */
/* 00 - порт, */
/* 01 - основная функция, */
/* 10 - альтернативная функция, */
/* 11 - переопределенная функция */
/* DIGITAL - Режим работы порта: */
/* 1 - цифровой, */
/* 0 - аналоговый */
/* PULL - Подтяжка порта (~50 кОм): */
/* старшие 16 разрядов отвечают за подтяжку к питаню, */
/* младшие 16 разрядов отвечают за подтяжку к нулю */
/* 0 - подтяжка выключена, */
/* 1 - подтяжка включена */
/* PD - Режим драйвера: */
/* старшие 16 разрядов отвечают за работу входа: */
/* 0 - тригер Шмитта выключен, гистерезис ~200 мкА, */
/* 1 - тригер Шмитта включен, гистерезис ~400 мкА */
/* младшие 16 разрядов отвечают за работу выхода: */
/* 0 - управляемый драйвер, */
/* 1 - открытый сток */
/* GFEN - режим работы входного фильтра: */
/* 0 - фильтрация импульсов выключена, */
/* 1 - фильтрация импульсов включена (<10 нс) */
/* PWR - Режим работы вывода порта: */
/* 00 - передатчик отключен, */
/* 01 - фронт ~100 нс, */
/* 10 - фронт ~20 нс, */
/* 11 - фронт ~10 нс */
/*-----------------------------------------------------------*/
struct_ports * F = ((struct_ports *) 0x400E8000);
F->OE = 0xFF; /* Выход */
F->FUNC = 0x0000; /* Порт */
F->DIGITAL = 0xFF; /* Цифровые */
F->PULL = 0x00000000; /* Подтяжка отключена */
F->PD = 0x00000000; /* Управляемый драйвер */
F->PWR = 0xFFFF; /* Фронт ~10 нс */
F->GFEN = 0x0000; /* Фильтрация отключена */
F->RXTX = 0x01; /* 0-й бит включен, остальные выключены */
while(1){
F->RXTX ^= 0x03; /* 0 и 1 биты меняют состояния */
delay(1000000);
}
return 0;
}