![](https://i-blog.csdnimg.cn/blog_migrate/53701a2dbb467c3294dd1206f8d72dc3.png)
1. 让外设工作起来
只要给相应的控制器中的寄存器发一个指令
![](https://i-blog.csdnimg.cn/blog_migrate/19705975b56c67ac1bbd39aa12ff7ea7.png)
向设备控制器的寄存器写不就可以了吗?
需要查寄存器地址、内容的格式和语义、操作系统需要给用户提供一个简单视图---文件视图,这样方便
总的来说就是:
- 形成文件视图
- 发出out指令
- 形成中断处理
中断处理:当CPU(中央处理器)执行一条现行指令的时候,如果外设向CPU发出中断请求,那么CPU在满足响应的情况下,将发出中断响应信号,与此同时关闭中断,表示CPU不在受理另外一个设备的中断。这时,CPU将寻找中断请求源是哪一个设备,并保存CPU自己的程序计数器(PC)的内容。然后,他将转移到处理该中断源的中断服务程序。CPU在保存现场信息,设备服务(如交换数据)以后,将恢复现场信息。在这些动作完成以后,开放中断,并返回到原来被中断的主程序的下一条指令。
2. 一段操作外设的程序
![](https://i-blog.csdnimg.cn/blog_migrate/173baca6443db7bd61a46d6fffe5cf52.png)
3. 文件视图
![](https://i-blog.csdnimg.cn/blog_migrate/365478d09e96a5fcd30f929e362f5105.png)
4. 从显示器输出开始
![](https://i-blog.csdnimg.cn/blog_migrate/b3ea46dc3840df22116a605a0ab404b5.png)
![](https://i-blog.csdnimg.cn/blog_migrate/6a3df5a09ec21cd2d4dcfd1e424c9115.png)
![](https://i-blog.csdnimg.cn/blog_migrate/0fc4d2d5cb7df264ff9f7da21ecdf053.png)
5. 真正向屏幕输出
![](https://i-blog.csdnimg.cn/blog_migrate/9022ebd87f3d1a8a8e91fc2ebbae6e23.png)
![](https://i-blog.csdnimg.cn/blog_migrate/87927d0e7c809e675783e394d5d1ba70.png)
![](https://i-blog.csdnimg.cn/blog_migrate/9a5506ef2852b5a7482bf4002dacf38e.png)
![](https://i-blog.csdnimg.cn/blog_migrate/8d3a499dac312bd25924f4b03b45dabb.png)
![](https://i-blog.csdnimg.cn/blog_migrate/eb460e3bb8769566bfb6ba45d714d3d9.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c3253b613f232a098148432fcddc97f5.png)
6. printf的整个过程
![](https://i-blog.csdnimg.cn/blog_migrate/82e92c4ffa1dab9aeb5b297b3ef98338.png)