RISC_V循迹小车程序(自用)

RISC_V循迹小车程序

C程序

因为用的时perfv已经集成好的IDE,里面H文件已经包含好了,所以只有C。

位置在E:\project\car_1\car_1\src


/**************************************************************

 ** 本程序展示了蜂鸟的PWM功能,蜂鸟中定义了PWM0、PWM1、PWM2三个PWM控制寄存器,每个PWMx可以输出
 ** 4路PWM波,所以最多可以提供12路PWM波输出。本程序用到了PWM1的4路PWM波输出
 **
 ** 引脚硬件连接
 ** PWM输出,本程序用到了D3和D4输出
 ** PWM1_0用PWM_CMP0控制占空比,对应D4引脚(20)
 ** PWM1_1用PWM_CMP1控制占空比,对应D3_SCL引脚(19)
 ** PWM1_2用PWM_CMP2控制占空比,对应D5引脚(21)
 ** PWM1_3用PWM_CMP3控制占空比,对应D6引脚(22)
 **
 ** 红外信号(left)   ------------>  D0
 ** 红外信号(right)  ------------>  D1
 **
 ** 电机驱动模块      开发板
 ** IN1 ------------> D8
 ** IN2 ------------> D9
 ** IN3 ------------> D10
 ** IN4 ------------> D11
 ** ENA ------------> D3_SCL
 ** ENB ------------> D4
 **
 **舵机信号线 ------------> D5
 **
 **超声波收发模块           开发板
 **引脚 Trig  ------------>  A0
 **引脚 Echo  ------------>  A1
 **引脚 Vcc   ------------>  5V VCC
 **引脚 Gnd   ------------>  GND
**************************************************************/
/**********************************************************************
***********************************************************************/
//========================== smart-car-gpio===========================//
#define	run	1
#define stop 0
#define	left_monitor	D0_RX1
#define	right_monitor	D1_TX1

#define	car_motor_IN1		D8
#define	car_motor_IN2		D9
#define	car_motor_IN3		D10
#define	car_motor_IN4		D11

#define car_motor_ENA		D3_SCL
#define	car_motor_ENB		D4

#define servo_motor			D5//控制舵机 输出PWM的引脚
//2018-8-7
#define servo_motor_right		PWM1_REG(PWM_CMP2)  = 0xffff/1000*125;  // PWM高电平为0.5ms 舵机为0度
#define servo_motor_middle		PWM1_REG(PWM_CMP2)  = 0xffff/1000*125*3;// PWM高电平为1.5ms 舵机为90度
#define servo_motor_left		PWM1_REG(PWM_CMP2)  = 0xffff/1000*125*5;// PWM高电平为2.5ms 舵机为180度
//2018-8-8
#define left_monitor_run_fast    PWM1_REG(PWM_CMP1) = 0xffff/9*4 // 4/9 PWM
#define right_monitor_run_fast   PWM1_REG(PWM_CMP0) = 0xffff/9*4 // 4/9 PWM

#define left_monitor_run    PWM1_REG(PWM_CMP1) = 0xffff/9*3 // 2/9 PWM
#define right_monitor_run   PWM1_REG(PWM_CMP0) = 0xcccc/9*3 // 2/9 PWM
#define left_monitor_stop   PWM1_REG(PWM_CMP1) = 0
#define right_monitor_stop  PWM1_REG(PWM_CMP0) = 0
//===================================================================//

#include <stdio.h>
#include <stdlib.h>
#include "platform.h"
#include <string.h>
#include "plic/plic_driver.h"
#include "encoding.h"
#include <unistd.h>
#include "stdatomic.h"

void reset_demo (void);
uint32_t GPIO_SET(uint32_t pin_num,uint32_t pin_val,uint32_t pin_model);
void smartcar_init(void);
void tracking_car_control(void);
uint32_t read_pin_val(uint32_t pin_num);
int delay_us(uint32_t time_x);
void PWM_init();
volatile void wait_ms(uint64_t ms);
float ultrasonic(void);
void ultrasonic_control();
void motor_right();
void motor_left();
void motor_run();
void motor_stop();
void motor_back();
void motor_forward();


volatile int ultrasonic_run = 1;//超声波检测标志

//=================================================================
// Structures for registering different interrupt handlers
// for different parts of the application.
typedef void (*function_ptr_t) (void);
void no_interrupt_handler (void) {
   };
function_ptr_t g_ext_interrupt_handlers[PLIC_NUM_INTERRUPTS];
// Instance data for the PLIC.
plic_instance_t g_plic;

//******************************************************************
//函数名:  wait_ms()
//作者:    Alvin Xu of PerfXLab
//日期:    2018-08-01
//功能:    调用一次产生ms毫秒的软件延时
//输入参数:ms :毫秒数
//返回值:  无
//修改记录:无
//******************************************************************
volatile void wait_ms(uint64_t ms)//busy wait for the specified time
{
   
  static const uint64_t ms_tick = RTC_FREQ/1000;
  volatile uint64_t * mtime  = (uint64_t*) (CLINT_CTRL_ADDR + CLINT_MTIME);
  uint64_t then = (ms_tick * ms) + *mtime;
  while(*mtime<then);
}



//******************************************************************
//函数名:  reset_demo
//作者:    PerfXLab
//日期:    2018-07-04
//功能:    定时器初始化程序
//输入参数:无
//返回值:  无
//修改记录:无
//******************************************************************
void reset_demo ()
{
   
  // Disable the machine & timer interrupts until setup is done.
  clear_csr(mie, MIP_MEIP);
  clear_csr(mie, MIP_MTIP);

  for (int ii 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值