问答

汇集网友智慧,解决技术难题

21ic问答首页 - gd32h759使用OSPI四线通信获取adc模块的值

通信 ADC模块 使用 获取 GD32H759

gd32h759使用OSPI四线通信获取adc模块的值

1123132026-01-15
该怎么使用OSPI技术,根据flah那种改的感觉不对,读到的值一直与示波器获取的波形对不起来。

void ad7380_read(uint8_t *pdata, ospi_parameter_struct *ospi_struct)
{
    ospi_regular_cmd_struct cmd = {0};

    cmd.operation_type = OSPI_OPTYPE_COMMON_CFG;//间接模式或自动轮询
    // cmd.instruction      = 0x00;
    cmd.ins_size = OSPI_INSTRUCTION_16_BITS;

    cmd.ins_mode  = OSPI_INSTRUCTION_1_LINE;
    // cmd.ins_mode  = OSPI_INSTRUCTION_NONE;//clk就不执行了,不能无指令?
    cmd.addr_mode = OSPI_ADDRESS_NONE;
    cmd.alter_bytes_mode = OSPI_ALTERNATE_BYTES_NONE;// 无地址,无备用字节

    cmd.data_mode = OSPI_DATA_4_LINES;   // 固定

    cmd.nbdata = 8;      //读取8字节(4个通道 x 2字节)|16 bit :AD7380 每个通道数据是 16 位(2 字节),读取 4 个通道的数据,共需要 8 字节(4 * 2 字节)。
    cmd.dummy_cycles = OSPI_DUMYC_CYCLES_0;//  当OSPI工作在2线、4线或者8线模式下从外部存储器中接收数据时,至少设置一个空指令周期,以确保数据的正确接收。


    cmd.data_dtr_mode = OSPI_DADTR_MODE_DISABLE;
    ospi_command_config(OSPI0, ospi_struct, &cmd);

     //进入间接读模式
    ospi_functional_mode_config(OSPI0, OSPI_INDIRECT_READ);

    ospi_receive(OSPI0,pdata);
      //增加延时,确保 AD7380 完成数据采样
    rt_kprintf("AD7380 reading ...\n\r");
    while(ospi_flag_get(OSPI0, OSPI_FLAG_BUSY)); // 等待读取完成


回答 +关注 0
205人浏览 0人回答问题 分享 举报
0 个回答

您需要登录后才可以回复 登录 | 注册