硬汉嵌入式论坛

 找回密码
 立即注册
查看: 865|回复: 3
收起左侧

VisaulGDB 工程添加PIO范例,无法编译

[复制链接]

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
发表于 2022-3-16 18:09:37 | 显示全部楼层 |阅读模式
从git仓库找的 pio 范例,复制到自己的文件夹
image.png

编译找不到这个文件:  (整个工程文件夹都找不到,难道需要自动生成下)
#include "blink.pio.h"

image.png
回复

使用道具 举报

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
 楼主| 发表于 2022-3-16 21:25:25 | 显示全部楼层
按照官方说明, VSCODE 编译一下pio工程,自动在build文件夹下创建了这 h文件。再将它复制到VisaulGDB工程中。

image.png

回复

使用道具 举报

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
 楼主| 发表于 2022-3-17 00:41:12 | 显示全部楼层
blink.pio.h 文件内容:
红字部分就是状态机的二进制程序了。用asm汇编程序生产。当然指令很简单,也可以用c语言宏来生成这些常量。

// -------------------------------------------------- //
// This file is autogenerated by pioasm; do not edit! //
// -------------------------------------------------- //

#pragma once

#if !PICO_NO_HARDWARE
#include "hardware/pio.h"
#endif

// ----- //
// blink //
// ----- //

#define blink_wrap_target 2
#define blink_wrap 7

static const uint16_t blink_program_instructions[] = {
    0x80a0, //  0: pull   block                     
    0x6040, //  1: out    y, 32                     
            //     .wrap_target
    0xa022, //  2: mov    x, y                       
    0xe001, //  3: set    pins, 1                    
    0x0044, //  4: jmp    x--, 4                     
    0xa022, //  5: mov    x, y                       
    0xe000, //  6: set    pins, 0                    
    0x0047, //  7: jmp    x--, 7  
                  
            //     .wrap
};

#if !PICO_NO_HARDWARE
static const struct pio_program blink_program = {
    .instructions = blink_program_instructions,
    .length = 8,
    .origin = -1,
};

static inline pio_sm_config blink_program_get_default_config(uint offset) {
    pio_sm_config c = pio_get_default_sm_config();
    sm_config_set_wrap(&c, offset + blink_wrap_target, offset + blink_wrap);
    return c;
}

// this is a raw helper function for use by the user which sets up the GPIO output, and configures the SM to output on a particular pin
void blink_program_init(PIO pio, uint sm, uint offset, uint pin) {
   pio_gpio_init(pio, pin);
   pio_sm_set_consecutive_pindirs(pio, sm, pin, 1, true);
   pio_sm_config c = blink_program_get_default_config(offset);
   sm_config_set_set_pins(&c, pin, 1);
   pio_sm_init(pio, sm, offset, &c);
}

#endif


回复

使用道具 举报

747

主题

1049

回帖

3295

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3295
 楼主| 发表于 2022-3-17 00:53:38 | 显示全部楼层
PIO的指令非常简单

image.png
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-12 03:08 , Processed in 0.167765 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表