Разработка автоматизированного рабочего места оператора обработки информации радиотехнических систем
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
LOAD_ADDRESS (AT91C_DDR2 + 0x0100000)
/// Базовый адресс в котором находится декодированное изображение
#define IMAGE_BASE_ADDRESS (AT91C_DDR2 + 0x0200000)
/// Адресс Экранной заставки
#define DISPLAY_ADDRESS (AT91C_DDR2 + 0x0300000)
#elif defined(PINS_SDRAM)
#else
#error Not define PINS_DDRAM
#endif
/// DMA transfer WORD width.
#define DMA_TRANSFER_WIDTH 2
/// Numbers of color channel of image (RGB).
#define PICTURE_COLOR_CHANNEL 3
/// Ширина LCD Дислея
#define IMAGE_WIDTH (480 * PICTURE_COLOR_CHANNEL)
/// Высота LCD Дислея
#define IMAGE_HEIGHT 272
/// Ширина графического файла.
#define PICTURE_WIDTH (480 * PICTURE_COLOR_CHANNEL)
/// Высота графического файла.
#define PICTURE_HEIGHT (272 *PICTURE_COLOR_CHANNEL)
/// Адрес смещения графического файла.
#define ATMEL_OFFSET_IN_IMAGE 0
/// Расчет количества строк для передачи.
#define DMA_TRANSFER_SIZE(size) ((size) >> DMA_TRANSFER_WIDTH)
/// Задержка экрана.
#define DELAY 3
//------------------------------------------------------------------------------
// Локальные переменные
//------------------------------------------------------------------------------
/// Буфер передачиDmaLinkList dmaLinkList[PICTURE_HEIGHT];
//------------------------------------------------------------------------------
// Local functions
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
/// Текст для прокерки режима передачи.
//------------------------------------------------------------------------------TestCallback()
{("-I- Callback fired !\n\r");
}
//------------------------------------------------------------------------------
//------------------------------------------------------------------------------
/// Декодирование Графического файла.
//------------------------------------------------------------------------------void DecodeImage(void)
{
// Decode new image_Decode((void *) IMAGE_LOAD_ADDRESS,
(unsigned char *)IMAGE_BASE_ADDRESS,_LCD_WIDTH,_LCD_HEIGHT,
24);
}
//------------------------------------------------------------------------------
/// Передача графического изображения используя мульти-буферный обмен передчи. Linked
/// Список источника и назначения.
/// \param x X-axis offset for destination
/// \param y Y-axis offset for destination.
//------------------------------------------------------------------------------void transferImageWithMultiBufferLli(unsigned int x, unsigned int y)
{int bufferSize;int startSourceAddr;int startDestAddr;_Initialize(DMA_CHANNEL_1, DMAD_USE_DEFAULT_IT);= IMAGE_BASE_ADDRESS + ATMEL_OFFSET_IN_IMAGE;= DISPLAY_ADDRESS + x * PICTURE_COLOR_CHANNEL + y * IMAGE_WIDTH;= DMA_TRANSFER_SIZE(PICTURE_WIDTH);(startSourceAddr, startDestAddr);_Configure_TransferController(DMA_CHANNEL_1, bufferSize, DMA_TRANSFER_WIDTH, DMA_TRANSFER_WIDTH, 0, 0);_Configure_Buffer(DMA_CHANNEL_1, DMA_TRANSFER_LLI, DMA_TRANSFER_LLI, &dmaLinkList[0], 0);_BufferTransfer(DMA_CHANNEL_1, DMA_TRANSFER_SIZE(PICTURE_WIDTH), TestCallback, 1);
}
//------------------------------------------------------------------------------
/// Передача части графического файла используя мульти-буферную передачу начиная с адреса.
//------------------------------------------------------------------------------void transferImageWithMultiBufferReload(void)
{int bufferSize;int startSourceAddr;int startDestAddr;
// Initialize DMA controller using channel 1._Initialize(DMA_CHANNEL_1, DMAD_USE_DEFAULT_IT);= IMAGE_BASE_ADDRESS; // + PICTURE_ROW * IMAGE_WIDTH;= DISPLAY_ADDRESS + 0 * IMAGE_WIDTH;;= (480*272*3); //DMA_TRANSFER_SIZE (PICTURE_HEIGHT * IMAGE_WIDTH*2);
/// Настройка размера передачи._Configure_TransferController(DMA_CHANNEL_1, bufferSize, DMA_TRANSFER_WIDTH, DMA_TRANSFER_WIDTH, startSourceAddr, startDestAddr);
// Настройка мульти-буферного обмена с автоматически перезагружаемым адресом и переходящим на смежный DMAD_Configure_Buffer(DMA_CHANNEL_1, DMA_TRANSFER_RELOAD, DMA_TRANSFER_CONTIGUOUS, 0 , 0);
// Старт 1 канала передачи. Данный графический файл загружается 1 раз.
DMAD_BufferTransfer(DMA_CHANNEL_1, bufferSize * 1, TestCallback, 0);(!DMAD_IsFinished(DMA_CHANNEL_1));
}
//------------------------------------------------------------------------------
/// Главная программа
//------------------------------------------------------------------------------main()
{int time;
unsigned char delay;
/// Координаты точки вдоль оси Х на экране.int x = 0;
/// Координаты точки вдоль оси У на экране.
unsigned int y = 0;_CONFIGURE(DBGU_STANDARD, 115200, BOARD_MCK);("-- Basic DMA Screensaver Project %s --\n\r", SOFTPACK_VERSION);("-- %s\n\r", BOARD_NAME);("-- Compiled: %s %s --\n\r", __DATE__, __TIME__);
//Конфигурация DDRAM для использования_ConfigureDdram(0, BOARD_DDRAM_BUSWIDTH);
// Декодирование файла.();
// Инициализация LCD дисплея.
LCDD_Fill((unsigned char*)DISPLAY_ADDRESS, COLOR_BLACK);_Initialize();_DisplayBuffer((unsigned char*)DISPLAY_ADDRESS);
// Время от момента посылки до момента получения ответа составляет 3 с.
RTT_SetPrescaler(AT91C_BASE_RTTC, 32768);
// Передача Графического с использованием нескольких буферов обмена с адресом автоматической перезагрузкой и смежными адресами назначения.
transferImageWithMultiBufferReload();= 0;(delay != DELAY){
// Wait next second(time == RTT_GetTime(AT91C_BASE_RTTC));= RTT_GetTime(AT91C_BASE_RTTC);++;
}
// Очистка Экрана.
// LCDD_Fill((unsigned char*)DISPLAY_ADDRESS, COLOR_BLACK);
// Старт заставки до начала нажатия кнопки.
/* while(1) {
// Transfer part of image(black picture) using single buffer transfer with Picture-In-Picture mode enable.(x, y);(&x, &y);
// Transfer part of image(atmel logo) using multi-buffer transfer with Linked List for both source and destination.(x, y);
// Back to desktop if user key detected.(DBGU_IsRxReady()){_GetChar();;
}(time == RTT_GetTime(AT91C_BASE_RTTC));= RTT_GetTime(AT91C_BASE_RTTC);
} */
}
// return 0;
}
Библиотеки:
#ifndef LCDD_H
#define LCDD_H
//------------------------------------------------------------------------------
// Глобальные функции
//------------------------------------------------------------------------------void LCDD_Initialize(void);void * LCDD_DisplayBuffer(void *pBuffer);void LCDD_Start(void);void LCDD_Stop(void);void LCDD_SetBacklight (unsigned int step only
#endif
#ifndef COLOR_H
#define COLOR_H
//------------------------------------------------------------------------------
/// RGB 24 Bpp
//------------------------------------------------------------------------------
#define COLOR_BLACK 0x000000
#define COLOR_WHITE 0xFFFFFF
#define COLOR_BLUE 0x0000FF
#define COLOR_GREEN 0x00FF00
#define COLOR_RED 0xFF0000
#define COLOR_NAVY 0x000080
#define COLOR_DARKBLUE 0x00008B
#define COLOR_DARKGREEN 0x006400
#define COLOR_DARKCYAN 0x008B8B
#define COLOR_CYAN 0x00FFFF
#define COLOR_TURQUOISE 0x40E0D0
#define COLOR_INDIGO 0x4B0082
#define COLOR_DARKRED 0x800000
#define COLOR_OLIVE 0x808000
#define COLOR_GRAY 0x808080
#define COLOR_SKYBLUE 0x87CEEB
#define COLOR_BLUEVIOLET 0x8A2BE2
#define COLOR_LIGHTGREEN 0x90EE90
#define COLOR_DARKVIOLET 0x9400D3
#define COLOR_YELLOWGREEN 0x9ACD32
#define COLOR_BROWN 0xA52A2A
#define COLOR_DARKGRAY 0xA9A9A9
#define COLOR_SIENNA 0xA0522D
#define COLOR_LIGHTBLUE 0xADD8E6
#define COLOR_GREENYELLOW 0xADFF2F
#define COLOR_SILVER 0xC0C0C0
#define COLOR_LIGHTGREY 0xD3D3D3
#define COLOR_LIGHTCYAN 0xE0FFFF
#define COLOR_VIOLET 0xEE82EE
#define COLOR_AZUR 0xF0FFFF
#define COLOR_BEIGE 0xF5F5DC
#define COLOR_MAGENTA 0xFF00FF
#define COLOR_TOMATO 0xFF6347
#define COLOR_GOLD 0xFFD700
#define COLOR_ORANGE 0xFFA500
#define COLOR_SNOW 0xFFFAFA
#define COLOR_YELLOW 0xFFFF00
#endif // #define COLOR_H
#ifndef DRAW_H
#define DRAW_H
//--------------------