Программный SPI, проект для CMake, проект для Proteus 8
This commit is contained in:
parent
593289547e
commit
cb6044c8fa
34
CMakeLists.txt
Normal file
34
CMakeLists.txt
Normal file
@ -0,0 +1,34 @@
|
||||
CMAKE_MINIMUM_REQUIRED(VERSION 2.8.4)
|
||||
SET(CMAKE_SYSTEM_NAME Generic)
|
||||
|
||||
#============================================================================================
|
||||
PROJECT(N3310Lib)
|
||||
|
||||
SET(DEVICE "atmega8")
|
||||
SET(FREQ "1000000")
|
||||
|
||||
#============================================================================================
|
||||
|
||||
SET(CMAKE_C_COMPILER avr-gcc)
|
||||
SET(CMAKE_C_FLAGS "-Os -mmcu=${DEVICE} -DF_CPU=${FREQ}UL -std=gnu99")
|
||||
|
||||
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/bin")
|
||||
|
||||
#============================================================================================
|
||||
|
||||
SET(SOURCE_FILES
|
||||
|
||||
main.c
|
||||
n3310.c
|
||||
|
||||
)
|
||||
|
||||
#============================================================================================
|
||||
|
||||
ADD_EXECUTABLE(${PROJECT_NAME} ${SOURCE_FILES})
|
||||
|
||||
ADD_CUSTOM_COMMAND(TARGET ${PROJECT_NAME} POST_BUILD COMMAND avr-objcopy -O ihex -R.eeprom ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.hex)
|
||||
|
||||
ADD_CUSTOM_COMMAND(TARGET ${PROJECT_NAME} POST_BUILD COMMAND avr-objcopy -O ihex -j .eeprom --set-section-flags=.eeprom="alloc,load" --change-section-lma .eeprom=0 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME} ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME}.eep)
|
||||
|
||||
ADD_CUSTOM_COMMAND(TARGET ${PROJECT_NAME} POST_BUILD COMMAND avr-size ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/${PROJECT_NAME} --mcu=${DEVICE} --format=avr)
|
31
n3310.c
31
n3310.c
@ -56,7 +56,7 @@ static byte UpdateLcd;
|
||||
|
||||
/*
|
||||
* Имя : LcdInit
|
||||
* Описание : Производит инициализацию порта и SPI МК, контроллера LCD
|
||||
* Îïèñàíèå : Ïðîèçâîäèò èíèöèàëèçàöèþ ïîðòà ÌÊ è êîíòðîëëåðà LCD
|
||||
* Аргумент(ы) : Нет
|
||||
* Возвращаемое значение : Нет
|
||||
*/
|
||||
@ -66,7 +66,7 @@ void LcdInit ( void )
|
||||
LCD_PORT |= _BV ( LCD_RST_PIN );
|
||||
|
||||
// Устанавливаем нужные биты порта на выход
|
||||
LCD_DDR |= _BV( LCD_RST_PIN ) | _BV( LCD_DC_PIN ) | _BV( LCD_CE_PIN ) | _BV( SPI_MOSI_PIN ) | _BV( SPI_CLK_PIN );
|
||||
LCD_DDR |= _BV( LCD_RST_PIN ) | _BV( LCD_DC_PIN ) | _BV( LCD_CE_PIN ) | _BV(LCD_DATA_PIN) | _BV(LCD_CLK_PIN);
|
||||
|
||||
// Некалиброванная задержка
|
||||
Delay();
|
||||
@ -76,10 +76,6 @@ void LcdInit ( void )
|
||||
Delay();
|
||||
LCD_PORT |= _BV ( LCD_RST_PIN );
|
||||
|
||||
// Активируем SPI:
|
||||
// без прерываний, старший бит первый, режим мастера, CPOL->0, CPHA->0, Clk/4
|
||||
SPCR = 0x50;
|
||||
|
||||
// Отключаем LCD контроллер - высокий уровень на SCE
|
||||
LCD_PORT |= _BV( LCD_CE_PIN );
|
||||
|
||||
@ -220,20 +216,27 @@ static void LcdSend ( byte data, LcdCmdData cd )
|
||||
// Включаем контроллер дисплея (низкий уровень активный)
|
||||
LCD_PORT &= ~( _BV( LCD_CE_PIN ) );
|
||||
|
||||
byte i;
|
||||
|
||||
if (cd == LCD_DATA)
|
||||
{
|
||||
LCD_PORT |= _BV(LCD_DC_PIN);
|
||||
}
|
||||
else
|
||||
{
|
||||
LCD_PORT &= ~( _BV( LCD_DC_PIN ) );
|
||||
LCD_PORT &= ~_BV(LCD_DC_PIN);
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
|
||||
if ((data >> (7 - i)) & 1) {
|
||||
LCD_PORT |= _BV(LCD_DATA_PIN);
|
||||
} else {
|
||||
LCD_PORT &= ~_BV(LCD_DATA_PIN);
|
||||
}
|
||||
|
||||
// Отправка данных в контроллер дисплея
|
||||
SPDR = data;
|
||||
LCD_PORT |= _BV(LCD_CLK_PIN);
|
||||
LCD_PORT &= ~_BV(LCD_CLK_PIN);
|
||||
|
||||
// Ждем окончания передачи
|
||||
while ( (SPSR & 0x80) != 0x80 );
|
||||
}
|
||||
LCD_PORT |= _BV(LCD_DATA_PIN);
|
||||
LCD_PORT |= _BV(LCD_DC_PIN);
|
||||
|
||||
// Отключаем контроллер дисплея
|
||||
LCD_PORT |= _BV( LCD_CE_PIN );
|
||||
|
7
n3310.h
7
n3310.h
@ -22,19 +22,18 @@
|
||||
#include <avr/pgmspace.h>
|
||||
|
||||
// çàêîììåíòèðóéòå ýòó äèðåêòèâó, åñëè âàø äèñïëåé îðèãèíàëüíûé
|
||||
#define CHINA_LCD
|
||||
//#define CHINA_LCD
|
||||
|
||||
// Ïîðò ê êîòîðîìó ïîäêëþ÷åí LCD (çäåñü ïðèìåð ðàñïèíîâêè äëÿ ATmega8)
|
||||
// Библиотека использует аппаратный SPI, поэтому если хотите иной порт - придется реализовать SPI программно)
|
||||
#define LCD_PORT PORTB
|
||||
#define LCD_DDR DDRB
|
||||
|
||||
// Ðàñïèíîâêà ïîðòà
|
||||
#define LCD_DC_PIN PB1
|
||||
#define LCD_CE_PIN PB2
|
||||
#define SPI_MOSI_PIN PB3 // SDIN дисплея обязательно подключаем к MOSI аппаратного SPI
|
||||
#define LCD_DATA_PIN PB3
|
||||
#define LCD_RST_PIN PB4
|
||||
#define SPI_CLK_PIN PB5 // SCLK дисплея обязательно подключаем к SCK аппаратного SPI
|
||||
#define LCD_CLK_PIN PB5
|
||||
|
||||
// Ðàçðåøåíèå äèñïëåÿ â ïèêñåëÿõ
|
||||
#define LCD_X_RES 84 // ðàçðåøåíèå ïî ãîðèçîíòàëè
|
||||
|
BIN
sch/n3310.pdsprj
Normal file
BIN
sch/n3310.pdsprj
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user