ARM点灯,PWM,中断实验

点灯实验:

实验目的:控制LED2灯闪烁

 

一、看原理图       找到灯的原理图,分析灯的电气连接关系

1. 通过搜索LED2或者目录在设备板原理图上找到LED2

2. 分析LED2的电气连接关系,发现只要CHG_COK这个引脚输入高电平,LED2就亮了

3. CHG_COK是一个网络标号,通过在核心板上搜索这个名字可以找到设备板上的这个引脚接在CPU的哪个引脚上

4. 经分析发现CHG_COK接在CPU上的GPX2_7引脚上,这个引脚是功能复用的引脚,而我们仅仅需要的是输出一个高低电平这种功能

 

二、看芯片手册

1. 看芯片手册找这个引脚对应的寄存器GPX2CON(配置GPX2组所有引脚的功能)    GPX2DAT(决定GPX2组引脚的高低电平状态)

2. GPX2CON

Base Address: 0x1100_0000        //基地址

Address = Base Address + 0x0C40  = 0x11000c40

 

GPX2CON[7]  [31:28]:0x1 = Output //控制GPX2_7的输出功能,

   GPX2DAT

Address = 0x11000c44

        GPX2DAT[7]: [7] = 0   这个引脚是低电平

= 1   这个引脚是高电平

 

通过超级终端的kermit协议去下载.bin文件

loadb 0x40008000     //将.bin文件下载到0x40008000这个内存地址

 

go 0x40008000   //从内存的0x40008000这个位置运行



Timer Input Clock Frequency = PCLK/({prescaler value + 1})/{divider value}

{prescaler value} = 1 to 255

{divider value} = 1, 2, 4, 8, 16

 

Timer Input Clock Frequency = PCLK/(249+1)/4

    = 100MHz/1000

    = 100KHz       10us    PWM的递减计数器每10us减一次

 

 

 

 

PWM实验

实验目的:用PWM驱动蜂鸣器发出声音

 

一、看原理图

发现蜂鸣器接在cpu的XpwmTOUT0/LCD_FRM/GPD0_0这个引脚上,我们需要的是PMW的输出功能

 

二、看芯片手册

1, GPD0CON:GPD0CON[0]  [3:0] 0x2 = TOUT_0

 

2. 看PWM的综述

1. PWM的时钟源   PCLK   100MHz

2. PWM的工作时钟是通过PCLK经过两级分频得到的

3. TCNTB这个寄存器决定输出脉冲的周期

4. TCMPB这个寄存器决定输出脉冲的占空比

3. 分析相关的寄存器

TCFG0  //配置寄存器0    设置一级分频系数

     Prescaler 0  [7:0]:                249

TCFG1  //配置寄存器1    设置二级分频系数

     Divider MUX0  [3:0]         0010 = 1/4

TCON

     Timer 0 auto reload on/off [3]: 1 = Interval mode (auto-reload)     

                                                              //打开自动重装载(更新TCNTB的值到递减计数器)

     Timer 0 manual update [1] :1 = Updates TCNTB0  //打开手动更新TCNTB(更新TCNTB的值到递减计数器)

     Timer 0 start/stop  [0] : 1 = Starts Timer 0   //开关

TCNTB0

     100          PWM输出的脉冲: 100*10us = 1ms

TCMPB0

      50          占空比50%

 

按键中断实验

实验目的:

按键按下,灯会闪烁一次

 

Supports three interrupt types:

Software Generated Interrupt (SGI)

Private Peripheral Interrupt (PPI)

Shared Peripheral Interrupt (SPI)

 

key2产生的中断到达cpu核要经过以下三级控制:

1. 外设控制器(GPIO控制器)

2. 中断控制器(GIC)

3. CPU核

 

SPI号           中断号         中断源

25               57         –  EINT[9]

 

一、看原理图

发现KEY2接在CPU上的GPX1_1引脚上(配置引脚的功能,作为中断功能)

分析发现key2从按下到抬起对应的引脚一共经历了4个状态(设置中断触发方式)

 

 

 

二、看芯片手册

1. 在外设控制器上使能KEY2中断

GPX1CON          //引脚的功能配置寄存器

GPX1CON[1]  [7:4]:0xF = WAKEUP_INT1[1]                    //中断功能、

 

EXT_INT41CON     //设置中断的触发方式

EXT_INT41_CON[1]  [6:4]: 0x2 = Triggers Falling edge     //下降沿触发中断

 

EXT_INT41_MASK   //GPIO控制器上的使能开关

EXT_INT41_MASK[1]  [1]: 0x0 = Enables Interrupt           //使能KEY2(GPX1_1)

 

EXT_INT41_PEND   //清中断

EXT_INT41_PEND[1]  [1]:  写1清中断

 

 

ICDISER1            //GIC中,每个中断的小开关,一个位对应一个中断

Set-enable bits  [25]:  1 enable

 

ICDIPTR14

CPU targets, byte offset 1  [15:8]:0x1      //将57号中断分发给CPU0来处理

 

ICDDCR              //全局使能,让所有中断都能到达CPU接口

Enable  [0]: 1  enable

 

 

ICCICR_CPU0         //全局使能,让所有到达CPU接口的中断都能通过CPU接口到达所连接的处理器

Enable  [0]: 1 = Enables signaling of interrupts

 

ICCPMR_CPU0         //设置中断优先级门限

Priority  [7:0]: 一共256个优先级,值越大优先级越低      0xff(门限最低,所有中断都能通过)

 

ICCIAR_CPU0         //当中断发生了之后,我们可以通过读取这个寄存器获取所发生的中断对应的中断号

ACKINTID  [9:0]: The interrupt ID    //中断号

 

ICCEOIR_CPU0        //当中断处理完成之后,将读取到的中断号写回到这个寄存器,表示cpu对这个中断已经处理完成,可以处理下一个中断

EOIINTID  [9:0]: The ACKINTID value from the corresponding ICCIAR access.

 

 

ICDICPR1            //在GIC的层次上进行清中断操作

Clear-pending bits  [25]: 写1清中断 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值