Чт мар 21, 2013 10:37:41
Atmega8 писал(а):ILI9320_AVR - при компиляции много ошибок...
Вт мар 26, 2013 13:09:57
Вт мар 26, 2013 14:21:43
Чт мар 28, 2013 12:40:24
Пт мар 29, 2013 19:03:25
Пн апр 01, 2013 19:28:36
Ср апр 24, 2013 08:20:03
#include "stm8s.h"
#include "stm8s_gpio.h"
#include "stm8s_clk.h"
#define MAX_X 131
#define MAX_Y 160
#define CMD 0
#define DAT 1
/* SPFD54124 Инструкции (см даташит)*/
#define SWRESET (0x01)
#define SLPOUT (0x11)
#define NORON (0x13)
#define INVOFF (0x20)
#define DISPON (0x29)
#define CASET (0x2A)
#define RASET (0x2B)
#define RAMWR (0x2C)
#define MADCTL (0x36)
#define IDMOFF (0x38)
#define COLMOD (0x3A)
/* Формирование цвета */
#define RGB(r,g,b) (uint16_t)((r >> 3) |((g >> 2) << 5) |((b >> 3) << 11))
/* Основные цвета */
#define COL_BLACK RGB(0,0,0)
#define COL_WHITE RGB(255,255,255)
#define COL_RED RGB(255,0,0)
#define COL_BLUE RGB(0,0,255)
#define COL_GREEN RGB(0,255,0)
#define COL_YELLOW RGB(255,255,0)
#define COL_MAGENTA RGB(255,0,255)
#define COL_AQUA RGB(0,255,255)
#define COL_PURPLE RGB(160,32,240)
#define COL_REDPINK RGB(255,50,50)
#define COL_ORANGE RGB(255,165,0)
// управление ногами rst,cs,sda,clk
#define RST_SET GPIO_WriteHigh(GPIOC, GPIO_PIN_6);
#define RST_RESET GPIO_WriteLow(GPIOC, GPIO_PIN_6);
#define CS_SET GPIO_WriteHigh(GPIOC, GPIO_PIN_4);
#define CS_RESET GPIO_WriteLow(GPIOC, GPIO_PIN_4);
#define SDA_SET GPIO_WriteHigh(GPIOC, GPIO_PIN_2);
#define SDA_RESET GPIO_WriteLow(GPIOC, GPIO_PIN_2);
#define CLK_SET GPIO_WriteHigh(GPIOC, GPIO_PIN_5);
#define CLK_RESET GPIO_WriteLow(GPIOC, GPIO_PIN_5);
#define F_CPU 16000000 //Тактовая частота процессора (внутр RC).
// функции задержек
void _delay_ms(uint32_t ms)
{
uint32_t nCount;
nCount=(F_CPU/10000)*ms; // возвращает тактовоую частоту HCLK в Гц, делим на 10000 и всё множим на ms
for (; nCount!=0; nCount--)
{
//6 тактов функция повтора + 4 пустые такта
__asm ("nop");
__asm ("nop");
__asm ("nop");
__asm ("nop");// = 10 тактов
}
}
/*Хардварный ресет драйвера*/
void lcd_reset()
{
RST_SET;
CS_SET;
CLK_SET;
_delay_ms(1);
RST_RESET;
CS_RESET;
_delay_ms(20);
RST_SET;
_delay_ms(20);
}
void lcd_SendByte(char mode,unsigned char c)
{
CS_RESET;
CLK_RESET;
if (mode)
SDA_SET
else
SDA_RESET;
CLK_SET;
for(unsigned char i=0;i<8;i++)
{
CLK_RESET;
if (c & 0x80)
SDA_SET
else
SDA_RESET;
CLK_SET;
c <<= 1;
}
CS_SET;
}
/*Видео окно*/
void lcd_rect(uint32_t x, uint32_t width, uint32_t y, uint32_t height)
{
/* Set CAS Address */
lcd_SendByte(CMD,CASET);
lcd_SendByte(DAT,0);
lcd_SendByte(DAT,x);
lcd_SendByte(DAT,0);
lcd_SendByte(DAT,width);
/* Set RAS Address */
lcd_SendByte(CMD,RASET);
lcd_SendByte(DAT,0);
lcd_SendByte(DAT,y);
lcd_SendByte(DAT,0);
lcd_SendByte(DAT,height);
/* Write RAM */
lcd_SendByte(CMD,RAMWR);
}
/*Запись в GRAM*/
void lcd_wr_gram(uint16_t gram)
{
lcd_SendByte(DAT,(uint8_t)(gram>>8));
lcd_SendByte(DAT,(uint8_t)gram);
}
/*Заливка GRAM*/
void lcd_clear(void)
{
volatile uint32_t n;
lcd_rect(0,MAX_X-1,0,MAX_Y-1);
n = (MAX_X) * (MAX_Y);
do {
/* 16Bit Colour Access */
lcd_wr_gram(COL_BLUE);
} while (--n);
}
/*Инициализация*/
void lcd_init()
{
lcd_reset();
lcd_SendByte(CMD,SWRESET);
_delay_ms(120);
lcd_SendByte(CMD,SLPOUT);
_delay_ms(20);
lcd_SendByte(CMD,INVOFF);
lcd_SendByte(CMD,IDMOFF);
lcd_SendByte(CMD,NORON);
lcd_SendByte(CMD,COLMOD);
lcd_SendByte(DAT,0x05);
_delay_ms(10);
lcd_SendByte(CMD,MADCTL);
lcd_SendByte(DAT,0x08);
_delay_ms(10);
lcd_SendByte(CMD,DISPON);
_delay_ms(10);
lcd_clear();
}
void main( void )
{
// сброс порта C
GPIO_DeInit(GPIOC);
// ноги 2,4,5,6 - на выход
GPIO_Init(GPIOC,GPIO_PIN_2,GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOC,GPIO_PIN_4,GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOC,GPIO_PIN_5,GPIO_MODE_OUT_PP_LOW_FAST);
GPIO_Init(GPIOC,GPIO_PIN_6,GPIO_MODE_OUT_PP_HIGH_FAST);
// тактирование ядра 16mHz
CLK_SYSCLKConfig(CLK_PRESCALER_HSIDIV1);
lcd_init();
}
#ifdef USE_FULL_ASSERT
/**
* @brief Reports the name of the source file and the source line number
* where the assert_param error has occurred.
* @param file: pointer to the source file name
* @param line: assert_param error line source number
* @retval : None
*/
void assert_failed(u8* file, u32 line)
{
/* User can add his own implementation to report the file name and line number,
ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */
/* Infinite loop */
while (1)
{
}
}
#endif
Ср май 01, 2013 19:01:38
Пн май 06, 2013 20:07:10
Пн май 06, 2013 20:36:30
Вт май 07, 2013 23:52:45
Ср май 08, 2013 10:19:39
Ср май 08, 2013 11:53:29
... ну так почему не использовать аппаратный SPI? ... или не понял из-за чего "тормозит" заливка....maxlab писал(а):Здравствуйте! Не устроила меня скорость заливки на STM8.
Ср май 08, 2013 13:27:42
ChipKiller писал(а):... ну так почему не использовать аппаратный SPI? ... или не понял из-за чего "тормозит" заливка....maxlab писал(а):Здравствуйте! Не устроила меня скорость заливки на STM8.
Ср май 08, 2013 13:44:30
.. понятно, что чем больше, тем лучше. Просто программный SPI на stm8 будет поменьше 1mbit. После праздников попробую к stm32 подключить, только наверное Nokia1616 возьму - не охота со шлейфом ковыряться....maxlab писал(а):то все равно 8mbit в секунду. Это мало. В сотовых используют АРМ с тактовой от 160 мгц.
Ср май 08, 2013 14:06:13
Пн май 13, 2013 10:44:20
Пн май 13, 2013 18:24:52
Ср май 22, 2013 09:24:57
Вт май 28, 2013 18:15:07