处理器架构分类
-x86
一系列指令集架构,instruction set architecture,ISA,由intel 基于它的8086微处理器变种开发,16位
->IA32(intel自己取的名字),32位
->x86-64,即AMD64,64位版本
x86是可变指令长度,复杂指令集CISC
-PowerPC
增强精简指令集RISC,由苹果、IBM、摩托罗拉创建(AIM)
-arm
advanced risc machines
精简指令集RISC
功耗低,适合移动设备
-MIPS
无互锁流水线级微处理器Microprocessor without interlocked pipelined stages
RISC-V
龙芯1B
是龙芯2H的衍生产品,2011年研制成功
LED实验
板子背后的管脚:SPI库,CS片选
根据方括号里的编号做,如gpio22
LED1-8按照GPIO9往上连到07
4个按键从10连到21。共GND,0代表按下,选择上升沿触发
灯闪烁
头文件与宏定义
#include <stdio.h>
#include "ls1b.h"
#include "mips.h"
#include "ls1b_gpio.h"
#define LED_1 9
#define LED_2 11
#define LED_3 15
#define LED_4 17
#define LED_5 20
#define LED_6 22
#define LED_7 6
#define LED_8 7
#define LED_OPEN 0
#define LED_OFF 1
#define GPIO_IN 1
#define GPIO_OUT 0
初始化
void gpio_init(){
gpio_enable(LED_1,GPIO_OUT);
gpio_enable(LED_2,GPIO_OUT);
gpio_enable(LED_3,GPIO_OUT);
gpio_enable(LED_4,GPIO_OUT);
gpio_enable(LED_5,GPIO_OUT);
gpio_enable(LED_6,GPIO_OUT);
gpio_enable(LED_7,GPIO_OUT);
gpio_enable(LED_8,GPIO_OUT);
}
void led_function(int status){
gpio_write(LED_1,status);
gpio_write(LED_2,status);
gpio_write(LED_3,status);
gpio_write(LED_4,status);
gpio_write(LED_5,status);
gpio_write(LED_6,status);
gpio_write(LED_7,status);
gpio_write(LED_8,status);
}
灯全部闪烁的主函数
int main(void)
{
int status=LED_OFF;
ls1x_drv_init(); /* Initialize device drivers */
install_3th_libraries(); /* Install 3th libraies */
gpio_init();
while(1)
{
if(status){
status=LED_OPEN;
}else{
status=LED_OFF;
}
led_function(status);
unsigned int tickcount = get_clock_ticks();
delay_ms(500);
}
/*
* Never goto here!
*/
return 0;
}
用按键控制灯亮灭
#include <stdio.h>
#include "ls1b.h"
#include "mips.h"
#include "ls1b_gpio.h"
#define LED_1 9
#define LED_2 11
#define LED_3 15
#define LED_4 17
#define LED_5 20
#define LED_6 22
#define LED_7 6
#define LED_8 7
#define KEY_1 21
#define KEY_2 16
#define KEY_3 12
#define KEY_4 10
#define LED_OPEN 0
#define LED_OFF 1
#define GPIO_IN 1
#define GPIO_OUT 0
//-------------------------------------------------------------------------------------------------
// 主程序
//-------------------------------------------------------------------------------------------------
int led_status=LED_OFF;
int key_status=1;
void led_status_change(){
if(led_status==LED_OFF){
led_status=LED_OPEN;
}else{
led_status=LED_OFF;
}
}
void isr1(int va1,void *va2){ //按键1的中断处理函数
if (key_status)key_status=0;
else key_status=1;
}
void isr2(int va1,void *va2){ //中断处理函数
}
void isr3(int va1,void *va2){ //中断处理函数
}
void isr4(int va1,void *va2){ //中断处理函数
}
void gpio_init(){
//LED灯初始化
gpio_enable(LED_1,GPIO_OUT);
gpio_enable(LED_2,GPIO_OUT);
gpio_enable(LED_3,GPIO_OUT);
gpio_enable(LED_4,GPIO_OUT);
gpio_enable(LED_5,GPIO_OUT);
gpio_enable(LED_6,GPIO_OUT);
gpio_enable(LED_7,GPIO_OUT);
gpio_enable(LED_8,GPIO_OUT);
//按键初始化
gpio_enable(KEY_1,GPIO_IN);
gpio_enable(KEY_2,GPIO_IN);
gpio_enable(KEY_3,GPIO_IN);
gpio_enable(KEY_4,GPIO_IN);
ls1x_enable_gpio_interrupt(KEY_1);
ls1x_enable_gpio_interrupt(KEY_2);
ls1x_enable_gpio_interrupt(KEY_3);
ls1x_enable_gpio_interrupt(KEY_4);
ls1x_install_gpio_isr(KEY_1,INT_TRIG_EDGE_UP,isr1,NULL);
ls1x_install_gpio_isr(KEY_2,INT_TRIG_EDGE_UP,isr2,NULL);
ls1x_install_gpio_isr(KEY_3,INT_TRIG_EDGE_UP,isr3,NULL);
ls1x_install_gpio_isr(KEY_4,INT_TRIG_EDGE_UP,isr4,NULL);
}
void led_function(int status){
gpio_write(LED_1,status);
gpio_write(LED_2,status);
gpio_write(LED_3,status);
gpio_write(LED_4,status);
gpio_write(LED_5,status);
gpio_write(LED_6,status);
gpio_write(LED_7,status);
gpio_write(LED_8,status);
}
int main(void)
{
ls1x_drv_init(); /* Initialize device drivers */
install_3th_libraries(); /* Install 3th libraies */
gpio_init();
while(1)
{
led_function(key_status); //key=1,灯灭
}
return 0;
}
/*
* @@ End
*/
流水灯
void waterflow(){
led_function(LED_OFF);
while(1){
gpio_write(LED_8,LED_OFF);
gpio_write(LED_1,LED_OPEN);
delay_ms(500);
gpio_write(LED_1,LED_OFF);
gpio_write(LED_2,LED_OPEN);
delay_ms(500);
gpio_write(LED_2,LED_OFF);
gpio_write(LED_3,LED_OPEN);
delay_ms(500);
gpio_write(LED_3,LED_OFF);
gpio_write(LED_4,LED_OPEN);
delay_ms(500);
gpio_write(LED_4,LED_OFF);
gpio_write(LED_5,LED_OPEN);
delay_ms(500);
gpio_write(LED_5,LED_OFF);
gpio_write(LED_6,LED_OPEN);
delay_ms(500);
gpio_write(LED_6,LED_OFF);
gpio_write(LED_7,LED_OPEN);
delay_ms(500);
gpio_write(LED_7,LED_OFF);
gpio_write(LED_8,LED_OPEN);
delay_ms(500);
}
}
一直亮着,直到按一下变成流水灯。
led_function(LED_OPEN);
while(flag==0);
waterflow();
功能四合一
int led_status=LED_OFF;
int key_status=1;
int flag=0;
void led_status_change(){
if(led_status==LED_OFF){
led_status=LED_OPEN;
}else{
led_status=LED_OFF;
}
}
void isr1(int va1,void *va2){ //按键1的中断处理函数
flag=3;
if (key_status)key_status=0;
else key_status=1;
}
void isr2(int va1,void *va2){ //中断处理函数
flag=1;
}
void isr3(int va1,void *va2){ //中断处理函数
flag=2;
}
void isr4(int va1,void *va2){ //中断处理函数
flag=0;
}
void gpio_init(){
//LED灯初始化
gpio_enable(LED_1,GPIO_OUT);
gpio_enable(LED_2,GPIO_OUT);
gpio_enable(LED_3,GPIO_OUT);
gpio_enable(LED_4,GPIO_OUT);
gpio_enable(LED_5,GPIO_OUT);
gpio_enable(LED_6,GPIO_OUT);
gpio_enable(LED_7,GPIO_OUT);
gpio_enable(LED_8,GPIO_OUT);
//按键初始化
gpio_enable(KEY_1,GPIO_IN);
gpio_enable(KEY_2,GPIO_IN);
gpio_enable(KEY_3,GPIO_IN);
gpio_enable(KEY_4,GPIO_IN);
ls1x_enable_gpio_interrupt(KEY_1);
ls1x_enable_gpio_interrupt(KEY_2);
ls1x_enable_gpio_interrupt(KEY_3);
ls1x_enable_gpio_interrupt(KEY_4);
ls1x_install_gpio_isr(KEY_1,INT_TRIG_EDGE_UP,isr1,NULL);
ls1x_install_gpio_isr(KEY_2,INT_TRIG_EDGE_UP,isr2,NULL);
ls1x_install_gpio_isr(KEY_3,INT_TRIG_EDGE_UP,isr3,NULL);
ls1x_install_gpio_isr(KEY_4,INT_TRIG_EDGE_UP,isr4,NULL);
}
void led_function(int status){
gpio_write(LED_1,status);
gpio_write(LED_2,status);
gpio_write(LED_3,status);
gpio_write(LED_4,status);
gpio_write(LED_5,status);
gpio_write(LED_6,status);
gpio_write(LED_7,status);
gpio_write(LED_8,status);
}
void waterflow(){
gpio_write(LED_1,LED_OPEN);
delay_ms(500);
gpio_write(LED_1,LED_OFF);
gpio_write(LED_2,LED_OPEN);
delay_ms(500);
gpio_write(LED_2,LED_OFF);
gpio_write(LED_3,LED_OPEN);
delay_ms(500);
gpio_write(LED_3,LED_OFF);
gpio_write(LED_4,LED_OPEN);
delay_ms(500);
gpio_write(LED_4,LED_OFF);
gpio_write(LED_5,LED_OPEN);
delay_ms(500);
gpio_write(LED_5,LED_OFF);
gpio_write(LED_6,LED_OPEN);
delay_ms(500);
gpio_write(LED_6,LED_OFF);
gpio_write(LED_7,LED_OPEN);
delay_ms(500);
gpio_write(LED_7,LED_OFF);
gpio_write(LED_8,LED_OPEN);
delay_ms(500);
}
int main(void)
{
ls1x_drv_init(); /* Initialize device drivers */
install_3th_libraries(); /* Install 3th libraies */
gpio_init();
while(1){
if(flag==0)led_function(LED_OPEN); //按键4,常量
else if(flag==1){ //按键2,闪烁
led_status_change();
led_function(led_status);
delay_ms(500);
}else if(flag==2){ //按键3,流水灯
led_function(LED_OFF);
waterflow();
}else if(flag==3){ //按键4,开关控制亮灭
led_function(key_status);
}
}
/*
* Never goto here!
*/
return 0;
}
异步串口 UART
ISP工具,比PuTTY好看。
原理
9根线,
波特率(默认速率):码元速率 可以很高
每个数据多少位
停止位
UART3和5 官方接口
用串口控制LED或者打印图案
rt-thread