Timer & KEYPAD 11/24.

Slides:



Advertisements
Similar presentations
单片机 C 语言应用程序设计 主讲教师:廉哲 QQ: 电话: 办公室:综合楼 C318.
Advertisements

九年级物理一轮复习 第一章 声现象 知识要点. 1. 声音的产生和传播  ( 1 )声音的产生:声音是由于物体的振动产生的。  凡是发声的物体都在振动。振动停止,发声也停止。  ( 2 )声源:正在发声的物体叫声源。固体、液体、气体 都可以作为声源,有声音一定有声源。  ( 3 )声音的传播:声音的传播必须有介质,声音可以在.
现代电子技术实验 ——综合实验之单片机部分
C语言程序设计 主讲教师 :张群燕 电话:
眼科B超的原理及使用方法 一 基础知识.
TMS320F2812串行外设接口 Serial Peripheral Interface (SPI)
第一章 C语言概述 计算机公共教学部.
最新計算機概論 第3章 計算機組織.
Chapter 6 時序.
客户端入门十二小时 FOOLFLY DEMO DESIGN 讲师:林伟.
加速度計 指導老師 : 洪正瑞 製作人 : 蔡昌佑.
电工电子实验中心.
Hardware Chen Ching-Jung
題目:LED電子數位時鐘 第 二組 組員: 陳柏霖 李育昇.
單晶片MCS-51 C語言入門實習 第1章 微電腦與單晶片MCS-51架構 作者:董勝源.
4-10 STM Timer/Counter 與比較吻合輸出
第7章 中斷系統.
一、實習目的 1、瞭解各種閂鎖器之特性。 2、瞭解各種正反器之特性。 3、瞭解各種正反器之邏輯功能。 4、瞭解正反器之應用。
CH2 開發環境介紹 最簡單的互動設計 – Arduino一試就上手 孫駿榮、吳明展、盧聰勇.
项目成果展示 ——深圳凯吉尔科技—— 凯吉尔全线代理无锡研奥产品 说明:
主讲教师:吴琼 微信群:C语言2016 QQ群: 密码scu2016 昵称:“真名+学号”
微處理機原理與應用 Chapter 1 簡介 Chung-Min Wu, Ph.D
PIC16F1827介紹 以微控器為基礎之電路設計實務-微處理器實驗室.
VHDL數位電路實習與專題設計 文魁資訊-UE301
Chapter 5 Verilog硬體描述語言
S3c2410电路设计(以北京博创s3c2410-s实验箱为例讲解)
CH5 數位訊號 最簡單的互動設計 – Arduino一試就上手 孫駿榮、吳明展、盧聰勇.
Operating System Internals and Design principles
SWITCH&7-SEG元件控制 嵌入式作業系統實作 11/17.
第八章 数据通信.
HOLTEK 产品 在小家电的应用.
Game Boy Architecture 计算机体系结构课程报告 --刘继元.
授课老师:龚涛 信息科学与技术学院 2018年3月 教材: 《Visual C++程序员成长攻略》 《C++ Builder程序员成长攻略》
微处理器设计2 刘鹏 College of ISEE Zhejiang University
Freescale HCS12 微控制器.
第四章 BootLoader开发 附-s3c2410/s3c2440中断控制器介绍
第三單元 Control Structure II
NO.3.1 SOPC技术 第5章 Nios II 系统的外围设备.
初始化串列通訊埠 在啟始串列傳輸介面時有以下3個步驟:假設傳輸的通訊協定為9600bps,傳送8個位元資料,沒有同位位元,1個停止位元。
嵌入式系统设计与实例开发 ——ARM与C/OS-Ⅱ 第六讲 基于ARM的嵌入式硬件结构设计.
智慧電子應用設計導論(1/3) Display
K60基础课程 02 首都师范大学物理系 王甜.
第9章 DSP集成开发环境CCS 内容提要 CCS是TI公司推出的用于开发DSP芯片的集成开发环境,它采用Windows风格界面,集编辑、编译、链接、软件仿真、硬件调试以及实时跟踪等功能于一体,极大地方便了DSP芯片的开发与设计,是目前使用最为广泛的DSP开发软件之一。 本章对CCS开发软件的使用作了详细地介绍。首先,对CCS开发软件作了简要地说明,并介绍了该软件的安装及配置;其次,介绍了CCS的基本操作,包括:CCS的窗口和工具条、文件的编辑、反汇编窗口、存储器窗口、寄存器窗口、观察窗口
Ch9 Communicating with Hardware
第五章 C/C++及汇编语言的混合编程 5.1 ARM C/C++编译器 5.2 在C/C++程序中内嵌汇编指令
Freescale HCS12 微控制器.
6.1 输入/输出 6.2 CPU与外设数据传送方式 6. 3 MCS-51中断系统 6. 4 中断应用举例
组员:吴迪&王柳杨&金虎&陈武荣&谭金柏
第1章 概述 本章要点: C语言程序结构和特点 C语言程序的基本符号与关键字 C语言程序的编辑及运行 学习方法建议:
開發環境安裝.
亚博科技 Arduino视频教程 第8讲 蜂鸣器发声实验.
通訊實驗 實驗三 遙控車程式流程圖 姓名:顏得洋 學號:B
程式結構&語法.
5-6 串列埠模式0輸出埠擴充實習.
单片机原理与应用 主讲人:张荣刚 福建师范大学福清分校.
通訊實驗 實驗三 遙控車程式流程圖 姓名:顏得洋 學號:B
4-9 Timer/Counter 控制七段速度
K60入门课程 06 首都师范大学物理系 靳熙芃.
<编程达人入门课程> 本节内容 为什么要使用变量? 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
单片机原理及应用 实践部分 主讲人:刘 强 四川工商学院单片机教学团队 单片机原理及应用 实践部分 主讲人:刘 强
#include <iostream.h>
第六章 S3C2410的串口UART及编程 通用异步收发传输器(Universal Asynchronous Receiver/Transmitter)
单片机应用技术 (C语言版) 第4章 C51程序设计入门
第一章 認識Arduino Arduino微電腦板 Arduino的擴充板(shield) Arduino的接腳 ATmega328微控器
2.4 让声音为人类服务.
FPPA 程式設計 這一章開始正式進入FPPA程式設計的世界,我會從一個簡單的程式開始解說,一邊介紹專案開發時最常應用的技巧還有程式控制的手段,一邊把系統規畫的概念導入給大家,讓大家對專案的規畫能有一個初步的概念。
通訊實驗 實驗三 遙控車程式流程圖 姓名:顏得洋 學號:B
多媒体技术与应用 主讲教师:肖平 E_m a i Q Q:
第三章 流程控制 程序的运行流程 选择结构语句 循环结构语句 主讲:李祥 时间:2015年10月.
第2章 Arduino编程.
Presentation transcript:

Timer & KEYPAD 11/24

實習基礎 S3C4510B 提供了兩個32位元計時器(timer0、timer1),固定以下數方式進行計數。而其操作的方式可分為兩種,其分別為間隔(interval)模式與雙態(toggle)模式,這兩種模式的差別在於輸出波形的不同。 下數計數器 波形產生器 Time out 脈波訊號 System Clock

計時器模式 間隔 Interval Mode: 計時器計數結束即會產生一個脈波, 輸出頻率 fTOUT = fMCLK / 計時器資料值 雙態 Toggle Mode: 計時器計數結束進行波形轉態動作, 輸出頻率 fTOUT = fMCLK / (計時器資料值 x 2) CPU工作頻率 fMCLK = 50MHz

32位元計時器方塊圖 TDATA 暫存器 給予下數數值 產生中斷訊號 system clock time out TCNT 暫存器 TMOD 模式設定

計時器模式暫存器 計時器模式暫存器(TMOD),使用於控制2個32位元計時器的操作 Register Offset Address R/W Description Reset Value TMOD 0x6000 Timer mode register 0x00000000 31 5 4 3 2 1 0 TCLR1 TDM1 TE1 TCLR0 TDM0 TE0 TE0: Timer0 致能控制 0 = disable timer0 1 = enable timer0 TMD0: Timer0 模式選擇 0 = 間隔模式(interval) 1 = 雙態模式(toggle) TCLR0: Timer0 脈波輸出腳位(TOUT0) 初始化 0 = 在toggle模式下,初始化為0 1 = 在toggle模式下,初始化為1 TE1: Timer1 致能控制 0 = disable timer0 1 = enable timer0 TMD1: Timer1 模式選擇 0 = 間隔模式(interval) 1 = 雙態模式(toggle) TCLR1: Timer1 脈波輸出腳位(TOUT0) 初始化 0 = 在toggle模式下,初始化為0 1 = 在toggle模式下,初始化為1

計時器資料暫存器(TDATA0、TDATA1) 指明計時器 count value 計數總量(time-out的時間間隔) 計時器計數暫存器(TCNT0、TCNT1) 存放一般操作期間的timer0和timer1的目前計數值 Register Offset Address R/W Description Reset Value TDATA0 0x6004 Timer0 data register 0x00000000 TDATA1 0x6008 Timer1 data register 31 0 Time-out Data Register Offset Address R/W Description Reset Value TCNT0 0x600C Timer0 counter register 0xFFFFFFFF TCNT1 0x6010 Timer1 counter register 31 0 Timer Count

Example 在間隔 Interval Mode 產生週期 1ms 的 clock 輸出 (time out = 1ms) (1) 產生 1ms 的 clock : fTOUT = 1000 Hz Interval Mode 輸出頻率公式: fTOUT = fMCLK / 計時器資料值 CPU工作頻率 fMCLK = 50MHz 故計時器資料值 = 50000 fTOUT = 50MHz / 50000 = 1000 Hz time out = 1/ (1000 Hz) = 1ms (2) fMCLK = 50MHz => 週期 = 20ns = 計時器每 20ns 計數一次 若 計時器資料值(count value) = 50000 50000 x 20ns = 1ms 的 clock輸出

相關暫存器位址 creator_ram.pcm 之系統記憶體映射 Ox3FFFFFF Special Register Bank TCNT1: 0x3FF6010 TCNT0: 0x3FF600C TDATA1: 0x3FF6008 TDATA0: 0x3FF6004 TMOD: 0x3FF6000 . INTMSK: 0x3FF4008 INTPND: 0x3FF4004 INTMOD: 0x3FF4000 Special Register Bank Ox3FF0000 Ox3F0FFFF 64K I/O Ox3F00000 Ox19FFFFF 2MB Flash ROM Ox1800000 Ox1000000 16MB SDRAM Ox0000000

暫存器變數宣告 timer/4510addr.h /*============================================================ ;Timers control registers ;============================================================*/ #define TMOD ( *(volatile unsigned *) 0x03FF6000) #define TDATA0 ( *(volatile unsigned *) 0x03FF6004) #define TCNT0 ( *(volatile unsigned *) 0x03FF600C) #define TDATA1 ( *(volatile unsigned *) 0x03FF6008) #define TCNT1 ( *(volatile unsigned *) 0x03FF6010)

範例程式(timer) /************************************************************************* System Initialize *************************************************************************/ void Initial_Creator(void) { InitialHandler_ISR(); // 初始化中斷向量表格 init_TIMER0(); // 初始化TIMER0函式 } MAIN Program int main(void) { __enable_interrupt(); // 致能系統中斷服務 Initial_Creator(); // 此函式做Creator的初始化 EnableInterrupt(BIT_GMASK); // 致能中斷服務遮罩 while (1){ DisableInterrupt(BIT_GMASK); // 禁能中斷服務遮罩 return(0);

Init_timer0() (drive.c) void init_TIMER0(void) { TMOD = 0x00000001; TDATA0 = 50000000; //=50000000*20ns = 1s // install interrupt source and its service function InstallHandler_ISR(TIMER0, Timer_ISR_function); ClearPending(BIT_TIMER0); // 清除中斷Pending EnableInterrupt(BIT_TIMER0); // 致能中斷服務 } 使用Timer0, 間隔模式(interval) Timer 中斷服務副程式

中斷副程式 Timer_ISR_function (drive.c) int LED_light=0; void Timer_ISR_function(void) { switch(LED_light) { case 0: IO_REG2 = 0xf000; LED_light=1; break; case 1: IO_REG2 = 0x0f00; LED_light=0; break; default: break; } ClearPending(BIT_TIMER0); } 左半邊4個LED燈號亮 右半邊4個LED燈號亮

4X4 KEYPAD 藉由程式對SCAN_Ox設定”0”進行掃描,而由SCAN_Ix讀取資料可以判斷該列那一個KEY被按下。

各I/O之位元定義 7 6 5 4 3 2 1 15 14 13 12 11 10 9 8 IO_REG0 IO_REG1 IO_REG2 15 14 13 12 11 10 9 8 IO_REG0 SEG_H SEG_G SEG_F SEG_E SEG_D SEG_C SEG_B SEG_A COM3 COM2 COM1 COM0 IO_REG1 S1.7 S1.6 S1.5 S1.4 S1.3 S1.2 S1.1 S1.0 SCAN_ I3 I2 I1 I0 IO_REG2 SCAN_O3 SCAN_O2 SCAN_O1 SCAN_O0 D7 D6 D5 D4 D3 D2 D1 D0

範例程式 while (1) { //執行掃描 for (i=0;i<4;i++) { //掃描第i行keypad IO_REG2 =keyOutvalue[i] ; Delay (ms); //設定buff=掃描結果 buff = (0x0F00 & IO_REG1); //如果結果有掃描到 if(buff != 0x0f00 ) { keypad(i,buff, 1); Delay(2000); }

範例程式 void keypad(UI i,UI buff,UI k) { UI j, ms=100; //判別哪一列被按下 for (j=0;j<4;j++) { //如果第i列被按下 if( buff == keyInvalue[j] ) { //如果是第i行掃描到 if( i==0) SHOW7SEG(seg_com[k], j ); if (i==1) SHOW7SEG(seg_com[k], j+4 ); if (i==2) SHOW7SEG(seg_com[k], j+8 ); if (i==3) SHOW7SEG(seg_com[k], j+12); }

實習 實習一: 修改範例程式(timer),設定 Timer0 的 time-out 時間為 5 秒(S)。 實習二: 修改範例程式(timer),使用附錄A的副程式(TEST_ISR)替換掉Timer_ISR_function ,作為 timer0 產生中斷時的中斷服務呼叫。 實習三: 修改範例程式(keypad),將按鍵輸出在不同的七階顯示器上面。 (keypad 第1次按下的鍵輸出在COM0) (keypad 第2次按下的鍵輸出在COM1) (keypad 第3次按下的鍵輸出在COM2) (keypad 第4次按下的鍵輸出在COM3) (keypad 第5次按下的鍵輸出在COM0) 一次輸出一個數字即可

附錄A int i; void TEST_ISR(void) { switch(i) { case 0: IO_REG0 = 0x0ec0; break; case 1: IO_REG0 = 0x0ef9; break; case 2: IO_REG0 = 0x0ea4; break; case 3: IO_REG0 = 0x0eb0; break; default: i=0; IO_REG0 = 0x0ec0; break; } i++; ClearPending(BIT_TIMER0); }