收藏 分享(赏)

实验备课笔记.doc

上传人:w89153 文档编号:6667527 上传时间:2019-04-20 格式:DOC 页数:28 大小:584KB
下载 相关 举报
实验备课笔记.doc_第1页
第1页 / 共28页
实验备课笔记.doc_第2页
第2页 / 共28页
实验备课笔记.doc_第3页
第3页 / 共28页
实验备课笔记.doc_第4页
第4页 / 共28页
实验备课笔记.doc_第5页
第5页 / 共28页
点击查看更多>>
资源描述

1、 实验 1 基于 ARM 处理器的看门狗实验一、实验代码及分析1、实验代码Watchdog_enable.s WTCON EQU 0x53000000 ; 看门狗控制寄存器WTCNT EQU 0x53000008 ; 看门狗计数寄存器AREA WATCHDOG_ENABLE,CODE,READONLYENTRY; 设置看门狗控制寄存器ldr r0, =WTCON ; 加载 WTCON 寄存器地址; 0x4a21 = 15:8=74, 5=1, 0=1;ldr r1, =0x4a21 ; 将 0x4a21 保存到 r1 里ldr r1, =0x4a21 ; 将 0x4a21 保存到 r1 里st

2、r r1, r0 ; 将 r1 里的值存入 r0 指向的地址; 设置看门狗计数寄存器,该寄存器的值在上电后被加载,1 秒超时ldr r2, = WTCNT ; 加载 WTCNT 寄存器地址ldr r3, =0x186a0 ; 将 0x2710 保存到 r1 里str r3, r2 ; 将 r3 里的值存入 r2 指向的地址IMPORT led_on ; 引入 led_on 符号bl led_on ; 调用 led_on 代码loopB loop ; 死循环END该文件主要完成看门狗控制寄存器的配置,然后启动看门狗开始工作,并调用 led_on 控制 LED 灯的闪烁。 由于看门狗的设置为 1

3、秒超时,所以 LED 灯闪烁 1 秒后,系统重启。led_on.SWTCON EQU 0x53000000GPBCON EQU 0x56000010GPBDAT EQU 0x56000014DELAYVAL EQU 0x8fffPAOMADENG EQU 0x10000000EXPORT led_onAREA LED_INIT,CODE,READONLY ;该伪指令定义代码段 LED_INIT,属性只读led_onLDR R2,=PAOMADENGMOV R3,#0xFFSTR R3,R2LDR R0,=DELAYVALBL delayLDR R2,=PAOMADENGMOV R3,#0xEF

4、STR R3,R2;显示左起第二个LDR R0,=DELAYVALBL delayLDR R2,=PAOMADENGMOV R3,#0xDFSTR R3,R2;显示左起第三个LDR R0,=DELAYVALBL delayLDR R2,=PAOMADENGMOV R3,#0xBFSTR R3,R2;显示左起第四个LDR R0,=0xFFFFFBL delayLDR R2,=PAOMADENGMOV R3,#0x7FSTR R3,R2LDR R0,=0xFFFFFBL delayB led_onmov pc, lrdelaySUB R0,R0,#1CMP R0,#0x0BNE delayMOV

5、PC,LREND ;将控制亮灯数据写入数据寄存器 r2Led_on.s 主要控制 Led 灯的闪烁实验 2 基于 ARM 处理器的实时时钟实验一、实验代码及分析实验代码(1) 表示日期、时间的数据结构/* 表示日期、时间的数据结构 */typedef struct ST_DATEshort year; / 年char mon; / 月char day; / 日char week_day; / 星期char hour; / 时char min; / 分char sec; / 秒 st_date;(2)/*/ Function name : rtc_set_date/ Description :

6、修改实时时钟当前时间、日期/ Return type : void/ Argument : p_date, 待设置的日期*/void rtc_set_date(st_date* p_date)rRTCCON = 0x01;rBCDYEAR = p_date-year;rBCDMON = p_date-mon;rBCDDAY = p_date-day;rBCDDATE = p_date-week_day;rBCDHOUR = p_date-hour;rBCDMIN = p_date-min;rBCDSEC = p_date-sec;rRTCCON = 0x00;(3) /*/ Function

7、name : rtc_get_date/ Description : 获取实时时钟当前时间、日期/ Return type : void/ Argument : p_date, 返回日期的指针*/void rtc_get_date(st_date* p_date)rRTCCON = 0x01;p_date-year = rBCDYEAR ;p_date-mon = rBCDMON ;p_date-day = rBCDDAY ;p_date-week_day= rBCDDATE ;p_date-hour = rBCDHOUR ;p_date-min = rBCDMIN ;p_date-sec =

8、 rBCDSEC ;rRTCCON = 0x00;(4)/* 采用 BCD 编码,如 2004 年需要设置的值为 0x2004 */m_date.year = 0x2000+0x04 ;m_date.mon = 0x03 ;m_date.day = 0x02 ;m_date.week_day = 0x02 ;m_date.hour = 0x15 ;m_date.min = 0x40 ;m_date.sec = 0x00 ;/* 修改当前日期和时间 */rtc_set_date(old_index = led_index;printf(“rnrn“);while(1) rtc_get_date(

9、old_index = led_index;printf(“RTC TIME : %4x/%02x/%02x %s - %02x:%02x:%02xn“,m_date.year,m_date.mon,m_date.day,dateam_date.week_day,m_date.hour,m_date.min,m_date.sec);/printf( /* 时钟数据为 BCD 码格式,以 16 进制显示 */ “bbbbbbbb%02x:%02x:%02x“, m_date.hour, m_date.min, m_date.sec);实验三 基于 ARM 处理器的 PWM 实验一、实验代码及分析

10、实验代码(1) 端口设置使用 PWM 控制蜂鸣器的工作/* 端口设置 */rGPBUP = rGPBUP /GPB4 0rGPBCON = rGPBCON /Function Setting TCLK0, TOUT3 0 rGPGUP = rGPGUP /GPG11rGPGCON = rGPGCON /TCLK1rGPHUP = rGPHUP /GPH9rGPHCON = rGPHCON /*地址族*/char sa_data14; /*14 字节的协议地址,包含该 socket 的 IP 地址和端口号。*/;struct sockaddr_in short int sa_family; /*

11、地址族*/unsigned short int sin_port; /*端口号*/struct in_addr sin_addr; /*IP 地址*/unsigned char sin_zero8; /*填充 0 以保持与 struct sockaddr 同样大小*/;这两个数据类型是等效的,可以相互转化,通常 sockaddr_in 数据类型使用更为方便。在建立socketadd 或 sockaddr_in 后,就可以对该 socket 进行适当的操作了。D. 套接字编程(1)函数说明 socket() 创建套接字 bind() 绑定本机端口 connect() 建立连接 listen()

12、监听端口 accept() 接受连接 recv(), read(), recvfrom() 数据接收 send(), write(), sendto() 数据发送 close(), shutdown() 关闭套接字(2)使用 TCP 时 Socket 编程s o c k e t 服务器端c l o s es e n d / s e n d t or e c v / r e c v f r o ma c c e p tl i s t e nb i n d s o c k e t c l o s er e c v / r e c v f r o ms e n d / s e n d t oc o

13、n n e c t客户端b i n d(3)使用 UDP 时 Socket 编程二、实验代码分析1.分析下面代码完成的工作A 服务器端代码/*server.c*/#include #include #include #include #include #include #include #include #define PORT 4321#define BUFFER_SIZE 1024#define MAX_QUE_CONN_NM 5int main()s o c k e t c l o s es e n dr e c va c c e p tl i s t e ns o c k e t c

14、l o s er e c vs e n dc o n n e c tr e c v f r o ms e n d t os e n d t or e c v f r o m或或 或或struct sockaddr_in server_sockaddr,client_sockaddr;int sin_size,recvbytes;int sockfd, client_fd;char bufBUFFER_SIZE;/*建立 socket 连接*/if (sockfd = socket(AF_INET,SOCK_STREAM,0)= -1)perror(“socket“);exit(1);print

15、f(“Socket id = %dn“,sockfd);/*设置 sockaddr_in 结构体中相关参数*/server_sockaddr.sin_family = AF_INET;server_sockaddr.sin_port = htons(PORT);server_sockaddr.sin_addr.s_addr = INADDR_ANY;bzero(int i = 1;/* 允许重复使用本地地址与套接字进行绑定 */setsockopt(sockfd, SOL_SOCKET, SO_REUSEADDR, /*绑定函数 bind()*/if (bind(sockfd, (struct

16、 sockaddr *)exit(1);printf(“Bind success!n“);/*调用 listen()函数,创建未处理请求的队列 */if (listen(sockfd, MAX_QUE_CONN_NM) = -1)perror(“listen“);exit(1);printf(“Listeningn“);/*调用 accept()函数,等待客户端的连接*/if (client_fd = accept(sockfd, (struct sockaddr *)exit(1);/*调用 recv()函数接收客户端的请求*/memset(buf , 0, sizeof(buf);if (

17、recvbytes = recv(client_fd, buf, BUFFER_SIZE, 0) = -1)perror(“recv“);exit(1);printf(“Received a message: %sn“, buf);close(sockfd);return 0;B客户端代码/*client.c*/#include #include #include #include #include #include #include #include #define PORT 4321#define BUFFER_SIZE 1024int main(int argc, char *argv)

18、int sockfd,sendbytes;char bufBUFFER_SIZE;struct hostent *host;struct sockaddr_in serv_addr;if(argc h_addr);bzero(/*调用 connect 函数主动发起对服务器端的连接*/if(connect(sockfd,(struct sockaddr *)exit(1);/*发送消息给服务器端*/if (sendbytes = send(sockfd, buf, strlen(buf), 0) = -1)perror(“send“);exit(1);close(sockfd);exit(0);

19、实验十 嵌入式 Linux 驱动程序开发一、基础内容#define MAJOR_NUM 100 /主设备号/* Set the message of the device driver */#define IOCTL_SET_MSG _IOR(MAJOR_NUM, 0, int*) /* Get the message of the device driver */#define IOCTL_GET_MSG _IOR(MAJOR_NUM, 1, int*)二、数码管的控制程序/add code/*/*文件名称: LEDSEG7.C */*实验现象: 数码管依次显示出 0、1,2、9、a、b、C

20、、d、E、F */*/#define U8 unsigned charunsigned char seg7table16 = /* 0 1 2 3 4 5 6 7*/0xc0, 0xf9, 0xa4, 0xb0, 0x99, 0x92, 0x82, 0xf8,/* 8 9 A B C D E F*/0x80, 0x90, 0x88, 0x83, 0xc6, 0xa1, 0x86, 0x8e,;void Delay(int time);/*/* 函数说明: JXARM9-2410 7 段构共阳数码管测试 */* 功能描述: 依次在 7 段数码管上显示 0123456789ABCDEF */* 返

21、回代码: 无 */* 参数说明: 无 */*/void Test_Seg7(int test) int i; /request reginunsigned long x10000006 = (unsigned long)ioremap(0x10000006, 32);unsigned long x10000004 = (unsigned long)ioremap(0x10000004, 32);/*(U8*) 0x10000006) = 0x00;writeb(0x00, x10000006);/* 数码管从 0 到 F 依次将字符显示出来 */for(i=0;i=0x0;i-) /* 查表并

22、输出数据 */ *(U8*) 0x10000004) = seg7tablei;writeb(seg7tablei,x10000004); Delay (10000000);iounmap(void *)x10000006);iounmap(void *)x10000004);/*/* Function name : 循环延时子程序 */* Description : 循环 time 次 */* Return type :void */* Argument : 循环延时计数器 */*/void Delay(int time) int i;int delayLoopCount=1000;for(;time0;time-);for(i=0;i“);MODULE_DESCRIPTION(“LED char driver“);

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报