diff options
| author | wuyangyong <[email protected]> | 2010-02-25 14:42:39 +0000 |
|---|---|---|
| committer | wuyangyong <[email protected]> | 2010-02-25 14:42:39 +0000 |
| commit | db6aa746f6fc8a63c78eb1d19f74b8f8bd224599 (patch) | |
| tree | 53ac79580e3f768405a1b7c386fd0dc2340d6887 | |
| parent | fb7ecf70e93544a774852db0eef90a745bf89596 (diff) | |
完善触摸和SPI_FLASH驱动
git-svn-id: https://rt-thread.googlecode.com/svn/trunk@448 bbd45198-f89e-11dd-88c7-29a3b14d5316
| -rw-r--r-- | bsp/stm32_radio/lcd.c | 10 | ||||
| -rw-r--r-- | bsp/stm32_radio/spi_flash.c | 434 | ||||
| -rw-r--r-- | bsp/stm32_radio/touch.c | 78 |
3 files changed, 269 insertions, 253 deletions
diff --git a/bsp/stm32_radio/lcd.c b/bsp/stm32_radio/lcd.c index bd70f454bc..e95528a767 100644 --- a/bsp/stm32_radio/lcd.c +++ b/bsp/stm32_radio/lcd.c @@ -313,7 +313,7 @@ void rt_hw_lcd_set_pixel(rtgui_color_t *c, rt_base_t x, rt_base_t y) ili9325_SetCursor(x,y);
ili9325_WriteRAM_Prepare();
- ili9325_WriteRAM(p);
+ ili9325_RAM = p ;
}
/* ��ȡ���ص���ɫ */
@@ -339,7 +339,7 @@ void rt_hw_lcd_draw_hline(rtgui_color_t *c, rt_base_t x1, rt_base_t x2, rt_base_ ili9325_WriteRAM_Prepare(); /* Prepare to write GRAM */
while (x1 < x2)
{
- ili9325_WriteRAM(p);
+ ili9325_RAM = p ;
x1++;
}
}
@@ -359,7 +359,7 @@ void rt_hw_lcd_draw_vline(rtgui_color_t *c, rt_base_t x, rt_base_t y1, rt_base_t ili9325_WriteRAM_Prepare(); /* Prepare to write GRAM */
while (y1 < y2)
{
- ili9325_WriteRAM(p);
+ ili9325_RAM = p ;
y1++;
}
}
@@ -379,7 +379,7 @@ void rt_hw_lcd_draw_raw_hline(rt_uint8_t *pixels, rt_base_t x1, rt_base_t x2, rt ili9325_WriteRAM_Prepare(); /* Prepare to write GRAM */
while (x1 < x2)
{
- ili9325_WriteRAM( *ptr );
+ ili9325_RAM = *ptr ;
x1 ++;
ptr ++;
}
@@ -414,7 +414,7 @@ rt_err_t rt_hw_lcd_init(void) ili9325_WriteRAM_Prepare();
for(test_y=0; test_y<76800; test_y++)
{
- ili9325_WriteRAM(temp++);
+ ili9325_RAM = temp++ ;
}
/* read */
diff --git a/bsp/stm32_radio/spi_flash.c b/bsp/stm32_radio/spi_flash.c index 88fbbe611a..2489a1367f 100644 --- a/bsp/stm32_radio/spi_flash.c +++ b/bsp/stm32_radio/spi_flash.c @@ -1,212 +1,224 @@ -#include <stm32f10x.h> -#include "spi_flash.h" - -extern unsigned char SPI_WriteByte(unsigned char data); - -/********************** hardware *************************************/ -/* SPI_FLASH_CS PA4 */ -/* SPI_FLASH_RST PA3 */ -#define FLASH_RST_0() GPIO_ResetBits(GPIOA,GPIO_Pin_3) -#define FLASH_RST_1() GPIO_SetBits(GPIOA,GPIO_Pin_3) - -#define FLASH_CS_0() GPIO_ResetBits(GPIOA,GPIO_Pin_4) -#define FLASH_CS_1() GPIO_SetBits(GPIOA,GPIO_Pin_4) -/********************** hardware *************************************/ - -static void GPIO_Configuration(void) -{ - GPIO_InitTypeDef GPIO_InitStructure; - - RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE); - - GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_3; - GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP; - GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; - GPIO_Init(GPIOA,&GPIO_InitStructure); - +#include <stm32f10x.h>
+#include "spi_flash.h"
+
+extern unsigned char SPI_WriteByte(unsigned char data);
+
+/********************** hardware *************************************/
+/* SPI_FLASH_CS PA4 */
+/* SPI_FLASH_RST PA3 */
+#define FLASH_RST_0() GPIO_ResetBits(GPIOA,GPIO_Pin_3)
+#define FLASH_RST_1() GPIO_SetBits(GPIOA,GPIO_Pin_3)
+
+#define FLASH_CS_0() GPIO_ResetBits(GPIOA,GPIO_Pin_4)
+#define FLASH_CS_1() GPIO_SetBits(GPIOA,GPIO_Pin_4)
+/********************** hardware *************************************/
+
+static void GPIO_Configuration(void)
+{
+ GPIO_InitTypeDef GPIO_InitStructure;
+
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_4 | GPIO_Pin_3;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
+ GPIO_Init(GPIOA,&GPIO_InitStructure);
+
FLASH_RST_0(); // RESET
- FLASH_CS_1(); - FLASH_RST_1(); -} - -static unsigned char SPI_HostReadByte(void) -{ - return SPI_WriteByte(0x00); -} - -static void SPI_HostWriteByte(unsigned char wByte) -{ - SPI_WriteByte(wByte); -} - -/*****************************************************************************/ -/*Status Register Format: */ -/* ------------------------------------------------------------------------- */ -/* | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | */ -/* |--------|--------|--------|--------|--------|--------|--------|--------| */ -/* |RDY/BUSY| COMP | device density | X | X | */ -/* ------------------------------------------------------------------------- */ -/* 0:busy | | AT45DB041:0111 | protect|page size */ -/* 1:ready | | AT45DB161:1011 | */ -/* --------------------------------------------------------------------------*/ -/*****************************************************************************/ -static unsigned char AT45DB_StatusRegisterRead(void) -{ - unsigned char i; - - FLASH_CS_0(); - SPI_HostWriteByte(AT45DB_READ_STATE_REGISTER); - i=SPI_HostReadByte(); - FLASH_CS_1(); - - return i; -} - -static void wait_busy(void) -{ - unsigned int i=0; - while (i++<2000) - { - if (AT45DB_StatusRegisterRead()&0x80) - { - break; - } - } -} - -static void read_page(unsigned int page,unsigned char * pHeader) -{ - unsigned int i=0; - - wait_busy(); - - FLASH_CS_0(); - SPI_HostWriteByte(AT45DB_MM_PAGE_TO_B1_XFER); - SPI_HostWriteByte((unsigned char)(page >> 6)); - SPI_HostWriteByte((unsigned char)(page << 2)); - SPI_HostWriteByte(0x00); - FLASH_CS_1(); - - wait_busy(); - - FLASH_CS_0(); - SPI_HostWriteByte(AT45DB_BUFFER_1_READ); - SPI_HostWriteByte(0x00); - SPI_HostWriteByte(0x00); - SPI_HostWriteByte(0x00); - SPI_HostWriteByte(0x00); - for (i=0; i<512; i++) - { - *pHeader++ = SPI_HostReadByte(); - } - FLASH_CS_1(); - -} - -static void write_page(unsigned int page,unsigned char * pHeader) -{ - unsigned int i; - - wait_busy(); - - FLASH_CS_0(); - SPI_HostWriteByte(AT45DB_BUFFER_2_WRITE); - SPI_HostWriteByte(0); - SPI_HostWriteByte(0); - SPI_HostWriteByte(0); - for(i=0; i<512; i++) - { - SPI_HostWriteByte(*pHeader++); - } - FLASH_CS_1(); - - wait_busy(); - - FLASH_CS_0(); - SPI_HostWriteByte(AT45DB_B2_TO_MM_PAGE_PROG_WITH_ERASE); - SPI_HostWriteByte((unsigned char)(page>>6)); - SPI_HostWriteByte((unsigned char)(page<<2)); - SPI_HostWriteByte(0x00); - FLASH_CS_1(); -} - - -#include <rtthread.h> -/* SPI DEVICE */ -static struct rt_device spi_flash_device; - -/* RT-Thread Device Driver Interface */ -static rt_err_t rt_spi_flash_init(rt_device_t dev) -{ - return RT_EOK; -} - -static rt_err_t rt_spi_flash_open(rt_device_t dev, rt_uint16_t oflag) -{ - - return RT_EOK; -} - -static rt_err_t rt_spi_flash_close(rt_device_t dev) -{ - return RT_EOK; -} - -static rt_err_t rt_spi_flash_control(rt_device_t dev, rt_uint8_t cmd, void *args) -{ - return RT_EOK; -} - -static rt_size_t rt_spi_flash_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size) -{ - rt_uint8_t *ptr; - rt_uint32_t index, nr; - - nr = size/512; - ptr = (rt_uint8_t*)buffer; - - for (index = 0; index < nr; index ++) - { - /* only supply single block read: block size 512Byte */ - read_page((pos + index * 512)/512, &ptr[index * 512]); - } - - return nr * 512; -} - -static rt_size_t rt_spi_flash_write (rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size) -{ - rt_uint8_t *ptr; - rt_uint32_t index, nr; - - nr = size / 512; - ptr = (rt_uint8_t*)buffer; - - for (index = 0; index < nr; index ++) - { - /* only supply single block write: block size 512Byte */ - write_page((pos + index * 512)/512, &ptr[index * 512]); - } - - return nr * 512; -} - -void rt_hw_spi_flash_init(void) -{ - GPIO_Configuration(); - - /* register spi_flash device */ - spi_flash_device.type = RT_Device_Class_Block; - spi_flash_device.init = rt_spi_flash_init; - spi_flash_device.open = rt_spi_flash_open; - spi_flash_device.close = rt_spi_flash_close; - spi_flash_device.read = rt_spi_flash_read; - spi_flash_device.write = rt_spi_flash_write; - spi_flash_device.control = rt_spi_flash_control; - - /* no private */ - spi_flash_device.private = RT_NULL; - - rt_device_register(&spi_flash_device, "spi0", - RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_STANDALONE); -} + FLASH_CS_1();
+ FLASH_RST_1();
+}
+
+static unsigned char SPI_HostReadByte(void)
+{
+ //return SPI_WriteByte(0x00);
+ //Wait until the transmit buffer is empty
+ //while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_TXE) == RESET);
+ while( (SPI1->SR & SPI_I2S_FLAG_TXE) == RESET);
+ // Send the byte
+ SPI_I2S_SendData(SPI1, 0);
+
+ //Wait until a data is received
+ //while (SPI_I2S_GetFlagStatus(SPI1, SPI_I2S_FLAG_RXNE) == RESET);
+ while( (SPI1->SR & SPI_I2S_FLAG_RXNE) == RESET);
+ // Get the received data
+ return SPI_I2S_ReceiveData(SPI1);
+
+}
+
+static void SPI_HostWriteByte(unsigned char wByte)
+{
+ SPI_WriteByte(wByte);
+}
+
+/*****************************************************************************/
+/*Status Register Format: */
+/* ------------------------------------------------------------------------- */
+/* | bit7 | bit6 | bit5 | bit4 | bit3 | bit2 | bit1 | bit0 | */
+/* |--------|--------|--------|--------|--------|--------|--------|--------| */
+/* |RDY/BUSY| COMP | device density | X | X | */
+/* ------------------------------------------------------------------------- */
+/* 0:busy | | AT45DB041:0111 | protect|page size */
+/* 1:ready | | AT45DB161:1011 | */
+/* --------------------------------------------------------------------------*/
+/*****************************************************************************/
+static unsigned char AT45DB_StatusRegisterRead(void)
+{
+ unsigned char i;
+
+ FLASH_CS_0();
+ SPI_HostWriteByte(AT45DB_READ_STATE_REGISTER);
+ i=SPI_HostReadByte();
+ FLASH_CS_1();
+
+ return i;
+}
+
+static void wait_busy(void)
+{
+ unsigned int i=0;
+ while (i++<2000)
+ {
+ if (AT45DB_StatusRegisterRead()&0x80)
+ {
+ break;
+ }
+ }
+}
+
+static void read_page(unsigned int page,unsigned char * pHeader)
+{
+ unsigned int i=0;
+
+ wait_busy();
+
+ FLASH_CS_0();
+ SPI_HostWriteByte(AT45DB_MM_PAGE_TO_B1_XFER);
+ SPI_HostWriteByte((unsigned char)(page >> 6));
+ SPI_HostWriteByte((unsigned char)(page << 2));
+ SPI_HostWriteByte(0x00);
+ FLASH_CS_1();
+
+ wait_busy();
+
+ FLASH_CS_0();
+ SPI_HostWriteByte(AT45DB_BUFFER_1_READ);
+ SPI_HostWriteByte(0x00);
+ SPI_HostWriteByte(0x00);
+ SPI_HostWriteByte(0x00);
+ SPI_HostWriteByte(0x00);
+ for (i=0; i<512; i++)
+ {
+ *pHeader++ = SPI_HostReadByte();
+ }
+ FLASH_CS_1();
+
+}
+
+static void write_page(unsigned int page,unsigned char * pHeader)
+{
+ unsigned int i;
+
+ wait_busy();
+
+ FLASH_CS_0();
+ SPI_HostWriteByte(AT45DB_BUFFER_2_WRITE);
+ SPI_HostWriteByte(0);
+ SPI_HostWriteByte(0);
+ SPI_HostWriteByte(0);
+ for(i=0; i<512; i++)
+ {
+ SPI_HostWriteByte(*pHeader++);
+ }
+ FLASH_CS_1();
+
+ wait_busy();
+
+ FLASH_CS_0();
+ SPI_HostWriteByte(AT45DB_B2_TO_MM_PAGE_PROG_WITH_ERASE);
+ SPI_HostWriteByte((unsigned char)(page>>6));
+ SPI_HostWriteByte((unsigned char)(page<<2));
+ SPI_HostWriteByte(0x00);
+ FLASH_CS_1();
+}
+
+
+#include <rtthread.h>
+/* SPI DEVICE */
+static struct rt_device spi_flash_device;
+
+/* RT-Thread Device Driver Interface */
+static rt_err_t rt_spi_flash_init(rt_device_t dev)
+{
+ return RT_EOK;
+}
+
+static rt_err_t rt_spi_flash_open(rt_device_t dev, rt_uint16_t oflag)
+{
+
+ return RT_EOK;
+}
+
+static rt_err_t rt_spi_flash_close(rt_device_t dev)
+{
+ return RT_EOK;
+}
+
+static rt_err_t rt_spi_flash_control(rt_device_t dev, rt_uint8_t cmd, void *args)
+{
+ return RT_EOK;
+}
+
+static rt_size_t rt_spi_flash_read(rt_device_t dev, rt_off_t pos, void* buffer, rt_size_t size)
+{
+ rt_uint8_t *ptr;
+ rt_uint32_t index, nr;
+
+ nr = size/512;
+ ptr = (rt_uint8_t*)buffer;
+
+ for (index = 0; index < nr; index ++)
+ {
+ /* only supply single block read: block size 512Byte */
+ read_page((pos + index * 512)/512, &ptr[index * 512]);
+ }
+
+ return nr * 512;
+}
+
+static rt_size_t rt_spi_flash_write (rt_device_t dev, rt_off_t pos, const void* buffer, rt_size_t size)
+{
+ rt_uint8_t *ptr;
+ rt_uint32_t index, nr;
+
+ nr = size / 512;
+ ptr = (rt_uint8_t*)buffer;
+
+ for (index = 0; index < nr; index ++)
+ {
+ /* only supply single block write: block size 512Byte */
+ write_page((pos + index * 512)/512, &ptr[index * 512]);
+ }
+
+ return nr * 512;
+}
+
+void rt_hw_spi_flash_init(void)
+{
+ GPIO_Configuration();
+
+ /* register spi_flash device */
+ spi_flash_device.type = RT_Device_Class_Block;
+ spi_flash_device.init = rt_spi_flash_init;
+ spi_flash_device.open = rt_spi_flash_open;
+ spi_flash_device.close = rt_spi_flash_close;
+ spi_flash_device.read = rt_spi_flash_read;
+ spi_flash_device.write = rt_spi_flash_write;
+ spi_flash_device.control = rt_spi_flash_control;
+
+ /* no private */
+ spi_flash_device.private = RT_NULL;
+
+ rt_device_register(&spi_flash_device, "spi0",
+ RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_STANDALONE);
+}
diff --git a/bsp/stm32_radio/touch.c b/bsp/stm32_radio/touch.c index f65faee7d7..730b67f931 100644 --- a/bsp/stm32_radio/touch.c +++ b/bsp/stm32_radio/touch.c @@ -1,15 +1,8 @@ #include "stm32f10x.h"
#include "rtthread.h"
+#include "board.h"
-static void Delay_Nus(unsigned int dt)
-{
- volatile unsigned int a;
- while (--dt)
- {
- for (a=0; a<5000; a++);
- }
-}
-
+#if (LCD_VERSION == 2)
/*
MISO PA6
MOSI PA7
@@ -24,8 +17,8 @@ CS PC4 7 6 - 4 3 2 1-0
s A2-A0 MODE SER/DFR PD1-PD0
*/
-#define TOUCH_MSR_X 0x90 //��X������ָ�� addr:1
-#define TOUCH_MSR_Y 0xD0 //��Y������ָ�� addr:3
+#define TOUCH_MSR_Y 0x90 //��X������ָ�� addr:1
+#define TOUCH_MSR_X 0xD0 //��Y������ָ�� addr:3
extern unsigned char SPI_WriteByte(unsigned char data);
@@ -36,15 +29,6 @@ static void WriteDataTo7843(unsigned char num) SPI_WriteByte(num);
}
-//SPI ������
-static unsigned int ReadDataFrom7843(void)
-{
- unsigned int temp;
- temp = SPI_WriteByte(0x00)<<4;
- temp |= ( (SPI_WriteByte(0x00)>>4)&0x0F );
- return temp;
-}
-
//��������
void Go_Touch(void)
{
@@ -52,12 +36,11 @@ void Go_Touch(void) unsigned int Y;
CS_0();
- WriteDataTo7843(TOUCH_MSR_X); //�Ϳ����� 10010000 ���ò�ַ�ʽ��X���� ��ϸ����й�����
- Delay_Nus(100);
- Y = ReadDataFrom7843(); //��X������
- WriteDataTo7843(TOUCH_MSR_Y); //�Ϳ����� 11010000 ���ò�ַ�ʽ��Y���� ��ϸ����й�����
- Delay_Nus(50);
- X = ReadDataFrom7843(); //��Y������
+ WriteDataTo7843(TOUCH_MSR_X | 1); /* ���Ͷ�X��������ر��ж� */
+ X = SPI_WriteByte(0x00)<<4; /* ��ȡ��һ�ֽ�MSB */
+ X |= ((SPI_WriteByte(TOUCH_MSR_Y | 1)>>4)&0x0F );/* ��ȡ�ڶ��ֽ� ͬʱ���Ͷ�Y������������*/
+ Y = SPI_WriteByte(0x00)<<4; /* ��ȡ��һ�ֽ�MSB */
+ Y |= ((SPI_WriteByte(1<<7)>>4)&0x0F ); /* ��ȡ�ڶ��ֽڲ����´��ж� */
CS_1();
rt_kprintf("\r\nX: %04d Y: %04d",X,Y);
@@ -80,6 +63,15 @@ static void exti_int_config(void) EXTI_InitTypeDef EXTI_InitStructure;
/* PB1 touch INT */
+ {
+ GPIO_InitTypeDef GPIO_InitStructure;
+ RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
+
+ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
+ GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
+ GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
+ GPIO_Init(GPIOB,&GPIO_InitStructure);
+ }
GPIO_EXTILineConfig(GPIO_PortSourceGPIOB, GPIO_PinSource1);
@@ -96,10 +88,31 @@ static void exti_int_config(void) #include <finsh.h>
void touch_test(void)
{
+ SPI_InitTypeDef SPI_InitStructure;
+
rt_kprintf("\r\ntouch testing....\r\n");
RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO,ENABLE);
+ /* Enable SPI_MASTER */
+ SPI_Cmd(SPI1, DISABLE);
+
+ /*------------------------ SPI1 configuration ------------------------*/
+ SPI_InitStructure.SPI_Direction = SPI_Direction_2Lines_FullDuplex;//SPI_Direction_1Line_Tx;
+ SPI_InitStructure.SPI_Mode = SPI_Mode_Master;
+ SPI_InitStructure.SPI_DataSize = SPI_DataSize_8b;
+ SPI_InitStructure.SPI_CPOL = SPI_CPOL_Low;
+ SPI_InitStructure.SPI_CPHA = SPI_CPHA_1Edge;
+ SPI_InitStructure.SPI_NSS = SPI_NSS_Soft;
+ SPI_InitStructure.SPI_BaudRatePrescaler = SPI_BaudRatePrescaler_64;/* 72M/64=1.125M */
+ SPI_InitStructure.SPI_FirstBit = SPI_FirstBit_MSB;
+ SPI_InitStructure.SPI_CRCPolynomial = 7;
+
+ SPI_I2S_DeInit(SPI1);
+ SPI_Init(SPI1, &SPI_InitStructure);
+
+ /* Enable SPI_MASTER */
+ SPI_Cmd(SPI1, ENABLE);
NVIC_Configuration();
exti_int_config();
@@ -109,12 +122,6 @@ void touch_test(void) GPIO_InitTypeDef GPIO_InitStructure;
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC,ENABLE);
- RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);
-
- GPIO_InitStructure.GPIO_Pin = GPIO_Pin_1;
- GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
- GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
- GPIO_Init(GPIOB,&GPIO_InitStructure);
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
@@ -122,10 +129,8 @@ void touch_test(void) GPIO_Init(GPIOC,&GPIO_InitStructure);
CS_1();
}
- Delay_Nus( 500 );
-
CS_0();
- WriteDataTo7843(0x00);
+ WriteDataTo7843( 1<<7 ); /* ���ж� */
CS_1();
}
FINSH_FUNCTION_EXPORT(touch_test, touch_test)
@@ -135,5 +140,4 @@ void EXTI1_IRQHandler(void) EXTI_ClearITPendingBit(EXTI_Line1);
Go_Touch();
}
-
-/******************* (C) COPYRIGHT 2008 STMicroelectronics */
+#endif
|
