예제 #1
0
파일: spi_test.c 프로젝트: zwzmzd/kl02z
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;
}
예제 #2
0
파일: main.c 프로젝트: guzhaoyuan/smartCar
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++]);
            }
        }
    }
}
예제 #3
0
파일: main.c 프로젝트: jeenter/CH-K-Lib
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();
    }
}
예제 #4
0
파일: cmd_spi.c 프로젝트: jeenter/CH-K-Lib
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;
}