add spi flash and sd for ch32v307
add spi flash and sd for ch32v307
This commit is contained in:
@@ -7,21 +7,186 @@
|
||||
*******************************************************************************/
|
||||
#include "debug.h"
|
||||
#include "tos_k.h"
|
||||
#include "sdio.h"
|
||||
#include "lcd_init.h"
|
||||
#include "lcd.h"
|
||||
#include "pic.h"
|
||||
#include "spi_flash.h"
|
||||
|
||||
|
||||
void led_init(void)
|
||||
void led_key_init(void)
|
||||
{
|
||||
GPIO_InitTypeDef GPIO_InitStructure = {0};
|
||||
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
|
||||
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE|RCC_APB2Periph_GPIOA, ENABLE);
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2|GPIO_Pin_3|GPIO_Pin_4|GPIO_Pin_5;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||||
GPIO_Init(GPIOE, &GPIO_InitStructure);
|
||||
GPIO_SetBits(GPIOE,GPIO_Pin_2);
|
||||
GPIO_SetBits(GPIOE,GPIO_Pin_3);
|
||||
GPIO_SetBits(GPIOE,GPIO_Pin_4);
|
||||
GPIO_SetBits(GPIOE,GPIO_Pin_5);
|
||||
/* key 1 2 3 */
|
||||
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0|GPIO_Pin_1|GPIO_Pin_8;
|
||||
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;
|
||||
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||||
GPIO_Init(GPIOA, &GPIO_InitStructure);
|
||||
}
|
||||
|
||||
uint8_t get_key(void)
|
||||
{
|
||||
uint16_t value=0;
|
||||
if((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) & GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)\
|
||||
& GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)) == 0 )
|
||||
{
|
||||
Delay_Ms(15);
|
||||
if((GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_0) & GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_1)\
|
||||
& GPIO_ReadInputDataBit(GPIOA,GPIO_Pin_8)) == 0 )
|
||||
{
|
||||
value= GPIO_ReadInputData(GPIOA);
|
||||
if((value&0x1)==0) return 1;
|
||||
else if((value&0x2)==0)return 2;
|
||||
else if((value&0x100)==0) return 3;
|
||||
else return 0;
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* @fn show_sdcard_info
|
||||
*
|
||||
* @brief SD Card information.
|
||||
*
|
||||
* @return none
|
||||
*/
|
||||
void show_sdcard_info(void)
|
||||
{
|
||||
switch(SDCardInfo.CardType)
|
||||
{
|
||||
case SDIO_STD_CAPACITY_SD_CARD_V1_1:printf("Card Type:SDSC V1.1\r\n");break;
|
||||
case SDIO_STD_CAPACITY_SD_CARD_V2_0:printf("Card Type:SDSC V2.0\r\n");break;
|
||||
case SDIO_HIGH_CAPACITY_SD_CARD:printf("Card Type:SDHC V2.0\r\n");break;
|
||||
case SDIO_MULTIMEDIA_CARD:printf("Card Type:MMC Card\r\n");break;
|
||||
}
|
||||
printf("Card ManufacturerID:%d\r\n",SDCardInfo.SD_cid.ManufacturerID);
|
||||
printf("Card RCA:%d\r\n",SDCardInfo.RCA);
|
||||
printf("Card Capacity:%d MB\r\n",(u32)(SDCardInfo.CardCapacity>>20));
|
||||
printf("Card BlockSize:%d\r\n\r\n",SDCardInfo.CardBlockSize);
|
||||
}
|
||||
const u8 TEXT_Buf[]={"CH32V307 SPI FLASH W25Qxx"};
|
||||
void spi_flash_test(void)
|
||||
{
|
||||
u8 datap[SIZE];
|
||||
u16 Flash_Model;
|
||||
// SPI_Flash_Init();
|
||||
Delay_Ms(50);
|
||||
|
||||
Flash_Model = SPI_Flash_ReadID();
|
||||
|
||||
switch(Flash_Model)
|
||||
{
|
||||
case W25Q80:
|
||||
printf("W25Q80 OK!\r\n");
|
||||
break;
|
||||
|
||||
case W25Q16:
|
||||
printf("W25Q16 OK!\r\n");
|
||||
break;
|
||||
|
||||
case W25Q32:
|
||||
printf("W25Q32 OK!\r\n");
|
||||
break;
|
||||
|
||||
case W25Q64:
|
||||
printf("W25Q64 OK!\r\n");
|
||||
break;
|
||||
|
||||
case W25Q128:
|
||||
printf("W25Q128 OK!\r\n");
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("Fail!\r\n");
|
||||
break;
|
||||
}
|
||||
|
||||
printf("Start Erase W25Qxx....\r\n");
|
||||
SPI_Flash_Erase_Sector(0);
|
||||
Delay_Ms(500);
|
||||
printf("Start Read W25Qxx....\r\n");
|
||||
SPI_Flash_Read(datap,0x0,SIZE);
|
||||
for(int16_t i=0;i<SIZE;i++)
|
||||
{
|
||||
printf("%x ", datap[i] );
|
||||
}
|
||||
printf("\r\n" );
|
||||
Delay_Ms(500);
|
||||
printf("Start Write W25Qxx....\r\n");
|
||||
SPI_Flash_Write((u8*)TEXT_Buf,0,SIZE);
|
||||
Delay_Ms(500);
|
||||
SPI_Flash_Read(datap,0x0,SIZE);
|
||||
printf("%s\r\n", datap );
|
||||
|
||||
if(memcmp(TEXT_Buf, datap, SIZE))
|
||||
{
|
||||
LCD_ShowString(16,16+16+16,"SPI Flash: Fail",WHITE,BLACK,16,0);
|
||||
}
|
||||
else
|
||||
{
|
||||
LCD_ShowString(16,16+16+16,"SPI Flash: OK",WHITE,BLACK,16,0);
|
||||
}
|
||||
}
|
||||
|
||||
u8 buf[512];
|
||||
u8 Readbuf[512];
|
||||
|
||||
/* sdcard test */
|
||||
void SD_Card_test(void)
|
||||
{
|
||||
u32 i;
|
||||
u32 Sector_Nums;
|
||||
|
||||
while(SD_Init())
|
||||
{
|
||||
printf("SD Card Error!\r\n");
|
||||
delay_ms(1000);
|
||||
}
|
||||
|
||||
show_sdcard_info();
|
||||
|
||||
printf("SD Card OK\r\n");
|
||||
Sector_Nums = ((u32)(SDCardInfo.CardCapacity>>20))/2;
|
||||
printf("Sector_Nums:%d\r\n", Sector_Nums);
|
||||
|
||||
for(i=0; i<512; i++){
|
||||
buf[i] = i;
|
||||
}
|
||||
|
||||
for(i=0; i<Sector_Nums/2; i++)
|
||||
{
|
||||
if(SD_WriteDisk(buf,i,1)) {printf("Wr %d sector fail\n", i);}
|
||||
if(SD_ReadDisk(Readbuf,i,1)){ printf("Rd %d sector fail\n", i);}
|
||||
|
||||
if(memcmp(buf, Readbuf, 512))
|
||||
{
|
||||
printf(" %d sector Verify fail\n", i);
|
||||
LCD_ShowString(16,16+16+16+16,"SD Sector:FAIL",WHITE,BLACK,16,0);
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(i==Sector_Nums/2)
|
||||
{
|
||||
LCD_ShowString(16,16+16+16+16+16,"SD: OK",WHITE,BLACK,16,0);
|
||||
printf("SD OK\r\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
LCD_ShowString(16,16+16+16+16+16,"SD ALL: FAIL",WHITE,BLACK,16,0);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#define TASK1_STK_SIZE 1024
|
||||
k_task_t task1;
|
||||
__aligned(4) uint8_t task1_stk[TASK1_STK_SIZE];
|
||||
@@ -56,7 +221,7 @@ void task2_entry(void *arg)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
volatile uint8_t key=0;
|
||||
/*******************************************************************************
|
||||
* Function Name : main
|
||||
* Description : Main program.
|
||||
@@ -70,12 +235,14 @@ int main(void)
|
||||
Delay_Init();
|
||||
USART_Printf_Init(115200);
|
||||
printf("SystemClk:%d\r\n",SystemCoreClock);
|
||||
led_init();
|
||||
led_key_init();
|
||||
LCD_Init();//LCD<43><44>ʼ<EFBFBD><CABC>
|
||||
LCD_Fill(0,0,LCD_W,LCD_H,WHITE);
|
||||
|
||||
SPI_Flash_Init();
|
||||
printf("Welcome to TencentOS tiny(%s)\r\n", TOS_VERSION);
|
||||
LCD_ShowString(0,0,"Welcome to TencentOS",RED,WHITE,16,0);
|
||||
LCD_Fill(0,0,LCD_W,LCD_H,BLACK);
|
||||
LCD_ShowString(0,0,"Welcome to TencentOS",WHITE,BLACK,16,0);
|
||||
|
||||
|
||||
tos_knl_init();
|
||||
tos_task_create(&application_task, "application_task", application_entry1, NULL, 4, application_task_stk, APPLICATION_TASK_STK_SIZE, 0);
|
||||
//tos_task_create(&task1, "task1", task1_entry, NULL, 3, task1_stk, TASK1_STK_SIZE, 0); // Create task1
|
||||
@@ -83,17 +250,37 @@ int main(void)
|
||||
tos_knl_start();
|
||||
|
||||
printf("should not run at here!\r\n");
|
||||
while(!key)
|
||||
{
|
||||
key=get_key();
|
||||
}
|
||||
|
||||
switch(key)
|
||||
{
|
||||
case 1:
|
||||
//lcd_test();
|
||||
break;
|
||||
case 2:
|
||||
LCD_Fill(0,0,LCD_W,LCD_H,BLACK);
|
||||
spi_flash_test();
|
||||
SD_Card_test();
|
||||
break;
|
||||
case 3:
|
||||
LCD_Fill(0,0,LCD_W,LCD_H,BLACK);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
while(1)
|
||||
{
|
||||
LCD_ShowString(0,0,"Welcome TencentOS",RED,WHITE,32,0);
|
||||
LCD_ShowString(0,40,"LCD_W:",RED,WHITE,16,0);
|
||||
LCD_ShowIntNum(48,40,LCD_W,3,RED,WHITE,16);
|
||||
LCD_ShowString(80,40,"LCD_H:",RED,WHITE,16,0);
|
||||
LCD_ShowIntNum(128,40,LCD_H,3,RED,WHITE,16);
|
||||
LCD_ShowString(80,40,"LCD_H:",RED,WHITE,16,0);
|
||||
LCD_ShowString(0,70,"Increaseing Nun:",RED,WHITE,16,0);
|
||||
LCD_ShowFloatNum1(128,70,t,4,RED,WHITE,16);
|
||||
LCD_ShowString(0,0,"Welcome TencentOS",WHITE,BLACK,32,0);
|
||||
LCD_ShowString(0,40,"LCD_W:",WHITE,BLACK,16,0);
|
||||
LCD_ShowIntNum(48,40,LCD_W,3,WHITE,BLACK,16);
|
||||
LCD_ShowString(80,40,"LCD_H:",WHITE,BLACK,16,0);
|
||||
LCD_ShowIntNum(128,40,LCD_H,3,WHITE,BLACK,16);
|
||||
LCD_ShowString(80,40,"LCD_H:",WHITE,BLACK,16,0);
|
||||
LCD_ShowString(0,70,"Increaseing Nun:",WHITE,BLACK,16,0);
|
||||
LCD_ShowFloatNum1(128,70,t,4,WHITE,BLACK,16);
|
||||
t+=0.11;
|
||||
for(j=0;j<3;j++)
|
||||
{
|
||||
|
Reference in New Issue
Block a user