int cmd_spi(int argc, char * const argv[]) { struct w25qxx_init_t init; uint32_t i, buf_size; static uint8_t buf[256]; struct w25qxx_attr_t w25qxx; init.delayms = DelayMs; init.get_reamin = _get_reamin; init.xfer = xfer; SPI_QuickInit(SPI0_MOSI_PA7_MISO_PA6, kSPI_CPOL1_CPHA1, 100*1000);//配置PTA7为MOSI PTA6为MISO, 波特率为100K,但是实际波特率要根据匹配出来的寄存器值算,有些误差 GPIO_QuickInit(HW_GPIOA, 5, kGPIO_Mode_OPP); //PTA5 SS GPIO_WriteBit(HW_GPIOA, 5, 1); PORT_PinMuxConfig(HW_GPIOB,0,kPinAlt3); //PTB0 SCK w25qxx_init(&init); //外部flash初始化 w25qxx_get_attr(&w25qxx); buf_size = sizeof(buf); /*读取外部flash256个字节*/ printf("reading page...\n"); w25qxx_read(0, buf, buf_size); print_buf(buf,PAGE_SIZE); /*擦除整个外部flash芯片*/ printf("erase all chips...\r\n"); w25qxx_erase_chip(); printf("erase complete\r\n"); /*读取外部flash256个字节*/ printf("reading page...\n"); w25qxx_read(0, buf, buf_size); print_buf(buf,PAGE_SIZE); /*编程外部flash256个字节*/ printf("programing a page...\n"); for(i=0;i<256;i++) buf[i] = i; w25qxx_write(0, buf, buf_size); printf("clearing buffer..\n"); for(i=0;i<256;i++) buf[i] = 0; /*读取外部flash256个字节*/ printf("reading page...\n"); w25qxx_read(0, buf, buf_size); print_buf(buf,PAGE_SIZE); printf("demo end.\n"); return 0; }
int main(void) { uint32_t i; uint32_t len; DelayInit(); GPIO_QuickInit(HW_GPIOE, 6, kGPIO_Mode_OPP); UART_QuickInit(UART0_RX_PD06_TX_PD07, 115200); UART_CallbackRxInstall(HW_UART0, UART_ISR); UART_ITDMAConfig(HW_UART0, kUART_IT_Rx, true); printf("NRF24L01 test\r\n"); /* 初始化 NRF2401模块 的SPI接口及片选 */ PORT_PinMuxConfig(HW_GPIOE, 1, kPinAlt2); PORT_PinMuxConfig(HW_GPIOE, 2, kPinAlt2); PORT_PinMuxConfig(HW_GPIOE, 3, kPinAlt2); PORT_PinMuxConfig(HW_GPIOE, 4, kPinAlt2); /* 初始化2401所需的CE引脚 */ GPIO_QuickInit(HW_GPIOE, 0 , kGPIO_Mode_OPP); /* 初始化2401模块*/ SPI_QuickInit(SPI1_SCK_PE02_SOUT_PE01_SIN_PE03, kSPI_CPOL0_CPHA0, 1*1000*1000); nrf24l01_init(HW_SPI1, 0); //检测是否存在无线设备,并配置接收和发送地址 if(nrf24l01_probe()) { printf("no nrf24l01 device found!\r\n"); } /* 进入Rx模式 */ nrf24l01_set_rx_mode(); while(1) { /* 如果收到串口数据则发送 */ if(gpRevChar != NULL) { nrf24l01_set_tx_mode(); nrf24l01_write_packet(gpRevChar, 1); nrf24l01_set_rx_mode(); gpRevChar = NULL; } /* 如果收到2401 的数据 则传输到串口 */ if(!nrf24l01_read_packet(NRF2401RXBuffer, &len)) { i = 0; while(len--) { UART_WriteByte(HW_UART0, NRF2401RXBuffer[i++]); } } } }
int main(void) { DelayInit(); GPIO_QuickInit(HW_GPIOE, 6, kGPIO_Mode_OPP); UART_QuickInit(UART0_RX_PD06_TX_PD07, 115200); printf("spi touch screen test\r\n"); /* 初始化SPI2 接口连接触控屏的触控芯片*/ SPI_QuickInit(SPI2_SCK_PD12_SOUT_PD13_SIN_PD14, kSPI_CPOL0_CPHA0, 2*1000*1000); PORT_PinMuxConfig(HW_GPIOD, 11, kPinAlt2); /* SPI2_PCS0 */ /* 初始化触控芯片 使用CS0片选 */ ads7843_init(HW_SPI2, HW_SPI_CS0); GUI_Init();//液晶屏界面初始化 GUI_SetBkColor(GUI_WHITE); //设置背景色 GUI_SetColor(GUI_BLACK); //设置前景色 GUI_Clear(); //清屏 GUI_SetPenSize(3); //设置点的大小 GUI_DispString("Measurement of\nA/D converter values"); while (1) { GUI_PID_STATE TouchState; int xPhys, yPhys; GUI_TOUCH_GetState(&TouchState); /* 获得触控位置 */ xPhys = GUI_TOUCH_GetxPhys(); /* 获得x轴的测量值 */ yPhys = GUI_TOUCH_GetyPhys(); /* 获得y轴的测量值 */ /* 显示测量结果 */ GUI_SetColor(GUI_BLUE); GUI_DispStringAt("Analog input:\n", 0, 20); GUI_GotoY(GUI_GetDispPosY() + 2); GUI_DispString("x:"); GUI_DispDec(xPhys, 4); GUI_DispString(", y:"); GUI_DispDec(yPhys, 4); /* Display the according position */ GUI_SetColor(GUI_RED); GUI_GotoY(GUI_GetDispPosY() + 4); GUI_DispString("\nPosition:\n"); GUI_GotoY(GUI_GetDispPosY() + 2); GUI_DispString("x:"); GUI_DispDec(TouchState.x,4); GUI_DispString(", y:"); GUI_DispDec(TouchState.y,4); GUI_DrawPoint(TouchState.x, TouchState.y); GUI_TOUCH_Exec(); } }
int CMD_SPI(int argc, char *const argv[]) { uint8_t data[6]; uint32_t instance; printf("SPI TEST CMD\r\n"); GPIO_QuickInit(HW_GPIOE, 6, kGPIO_Mode_OPP); instance = SPI_QuickInit(SPI2_SCK_PD12_SOUT_PD13_SIN_PD14, kSPI_CPOL0_CPHA0, 20*1000*1000); PORT_PinMuxConfig(HW_GPIOD, 12, kPinAlt2); // PORT_PinMuxConfig(HW_GPIOD, 13, kPinAlt2); // PORT_PinMuxConfig(HW_GPIOD, 14, kPinAlt2); // PORT_PinMuxConfig(HW_GPIOD, 11, kPinAlt2); //SPI2_PCS0 PORT_PinMuxConfig(HW_GPIOD, 15, kPinAlt2); //SPI2_PCS1 SPI_EnableTxFIFO(HW_SPI2, true); SPI_EnableRxFIFO(HW_SPI2, true); // SPI_ReadWriteByte(instance, HW_CTAR0, 0x90, HW_SPI_CS1, kSPI_PCS_KeepAsserted); // DelayMs(20); if((argc == 2) && (!strcmp(argv[1], "FLASH"))) { return DO_SPI_FLASH(argc, argv); } if((argc == 2) && (!strcmp(argv[1], "DMA"))) { return DO_SPI_DMA(argc, argv); } printf("param error\r\n"); PEout(6) = !PEout(6); SPI_ReadWriteByte(instance, HW_CTAR0, 0x90, HW_SPI_CS1, kSPI_PCS_KeepAsserted); SPI_ReadWriteByte(instance, HW_CTAR0, 0x00, HW_SPI_CS1, kSPI_PCS_KeepAsserted); SPI_ReadWriteByte(instance, HW_CTAR0, 0x00, HW_SPI_CS1, kSPI_PCS_KeepAsserted); SPI_ReadWriteByte(instance, HW_CTAR0, 0x00, HW_SPI_CS1, kSPI_PCS_KeepAsserted); // SPI_WaitSync(instance); data[0] = SPI_ReadWriteByte(instance, HW_CTAR0, 0xFF, HW_SPI_CS1, kSPI_PCS_KeepAsserted); data[1] = SPI_ReadWriteByte(instance, HW_CTAR0, 0xFF, HW_SPI_CS1, kSPI_PCS_ReturnInactive); PEout(6) = !PEout(6); printf("data:0x%02X 0x%02X\r\n", data[0], data[1]); //初始化SPI // SPI_QuickInit(BOARD_SPI_MAP, kSPI_CPOL0_CPHA1, 1*1000); //安装回调函数 // SPI_CallbackInstall(BOARD_SPI_INSTANCE, SPI_ISR); //开启SPI中断 // SPI_ITDMAConfig(BOARD_SPI_INSTANCE, kSPI_IT_TCF); return CMD_RET_USAGE; }