目录 1
第1章 嵌入式操作系统和DSP概述 1
1.1 嵌入式系统简介 2
1.1.1 什么是嵌入式系统 2
1.1.2 嵌入式系统的特点 4
1.1.3 嵌入式系统的分类 5
1.2 嵌入式系统的现状和发展趋势 8
1.2.1 嵌入式系统的现状 8
1.2.2 未来嵌入式系统的发展趋势 9
1.2.3 什么是DSP及DSP的特点 11
1.2.4 DSP的应用和开发前景 12
1.3 嵌入式系统的应用领域 15
1.4 嵌入式系统在机电控制方面的应用 17
1.5 基于DSP的嵌入式操作系统的移植 19
第2章 嵌入式操作系统的基本概念 20
2.1 基本概念 21
2.2 内核 22
2.3 任务管理 24
2.4 中断管理 34
2.5 实时系统小结 37
2.5.1 对存储器的需求 37
2.5.2 使用实时内核的优、缺点 37
2.5.3 实时系统小结 38
第3章 DSP RTOS嵌入式操作系统 39
3.1 DSP RTOS嵌入式操作系统的特点 39
3.2 DSP RTOS嵌入式操作系统的内核结构概述 40
3.2.2 任务 41
3.2.1 临界段、OS_ENTER_CRITICAL()和OS_EXIT_CRITICAL() 41
3.2.3 任务状态 42
3.2.4 任务控制块(OS_TCB) 43
3.2.5 就绪表 51
3.2.6 任务调度 54
3.2.7 任务级的任务切换,OS_TASK_SW() 55
3.2.8 空闲任务 58
3.2.9 DSPRTOS中的中断 58
3.2.10 时钟节拍 62
3.2.11 DSP RTOS初始化 64
3.2.12 DSP RTOS的启动 66
3.3 事件控制块和与事件相关的函数 67
3.3.1 事件控制块 67
3.3.2 将任务置于等待事件的任务列表 70
3.3.3 从等待事件的任务列表中使任务脱离等待状态 71
3.3.4 在等待事件的任务列表中查找优先级最高的任务 71
3.3.5 空余事件控制块链表 73
3.3.6 初始化一个事件控制块,OS_EventWaitListInit() 73
3.3.7 使一个任务进入就绪态,OS_EventTaskRdy() 74
3.3.8 使一个任务进入等待某事件发生状态,OS_EventTaskWait() 76
3.3.9 由于等待超时而将任务置为就绪态,OS_EventTO() 76
3.4 任务管理函数 77
3.5 时间管理函数 79
3.6 消息邮箱管理函数 80
3.6.1 建立一个邮箱,OSMboxCreate() 81
3.6.2 删除一个邮箱,OSMboxDel() 83
3.6.3 等待邮箱中的消息,OSMboxPend() 85
3.6.4 向邮箱发送一则消息,OSMboxPost() 87
3.6.5 向邮箱发送一则消息,OSMboxPostOpt() 89
3.6.6 无等待地从邮箱中得到一则消息,OSMboxAccept() 90
3.6.7 查询一个邮箱的状态,OSMboxQuery() 91
3.6.8 用邮箱作为二值信号量 93
3.6.9 用邮箱实现延迟,而不使用OSTimeDly() 94
3.7 消息队列管理函数 95
3.7.1 建立一个消息队列,OSQCreate() 98
3.7.2 删除一个消息队列,OSQDel() 100
3.7.3 等待消息队列中的消息,OSQPend() 102
3.7.4 向消息队列发送一则消息(FIFO),OSQPost() 105
3.7.5 向消息队列发送一则消息(LIFO),OSQPostFront() 106
3.7.6 向消息队列发送一则消息(广播,FIFO或LIFO),OSQPostOpt() 108
3.7.7 无等待地从消息队列中获得消息,OSQAccept() 110
3.7.8 清空消息队列,OSQFlush() 111
3.7.9 获取消息队列的状态,OSQQuery() 112
3.7.10 使用消息队列读取模拟量的值 114
3.7.11 消息队列用做计数型信号量 115
3.8 信号量管理函数 116
3.8.1 建立一个信号量,OSSemCreate() 117
3.8.2 删除一个信号量,OSSemDel() 119
3.8.3 等待一个信号量,OSSemPend() 121
3.8.4 发出一个信号量,OSSemPost() 123
3.8.5 无等待地请求一个信号量,OSSemAccept() 124
3.8.6 查询一个信号量的当前状态,OSSemQuery() 125
第4章 TMS320C2000系列DSP介绍 128
4.1 TMS320LF240x芯片介绍 128
4.1.1 TMS320LF240XDSP CPU控制器的体系结构和引脚 129
4.1.2 TMS320LF240x DSP引脚功能介绍 130
4.1.3 TMS320LF240x DSP存储器映射 137
4.1.4 TMS320LF240x DSP外设存储器映射 138
4.2 中央处理单元(CPU) 139
4.2.1 TMS320LF240x DSP的CPU内部功能模块介绍 140
4.2.2 存储器和I/O空间 148
4.2.3 系统配置和中断 151
4.2.4 程序控制 168
4.3.1 寻址方式 175
4.3 TMS320LF24x寻址方式和指令系统 175
4.3.2 指令集 178
4.3.3 典型指令说明 188
第5章 程序设计和CCS编译器 195
5.1 软件开发平台Code Composer及功能 195
5.1.1 Code Compose的安装 195
5.1.2 主要菜单及功能介绍 196
5.1.3 工作窗口区 197
5.1.4 调试一个程序的步骤 198
5.2.1 几个常用的汇编伪指令介绍 200
5.2 汇编语言程序设计 200
5.2.2 4种基本的文件 202
5.3 汇编语言编程实例 214
5.4 C语言程序设计 219
5.4.1 C语言函数库 219
5.4.2 函数调用规则 248
5.4.3 中断函数 249
5.4.4 4个基本文件和1个库函数文件 249
5.4.5 利用CCS编译器开发应用程序的步骤 264
5.4.6 C语言编程实例 267
5.4.7 C语言和汇编语言的混合编程方法 278
第6章 TMS320LF2407实验板介绍 281
6.1 CY-EVW2407EA实验板 281
6.1.1 CY-EVM2407特征和功能 281
6.1.2 CY-EVM2407的操作 282
6.1.3 扩展总线和接口 286
6.1.4 各种跳线 290
6.1.5 配置 295
6.2 CY-IPM2407电机控制开发套件概述 296
第7章 DSP RTOS在TMS320C2000系列上的移植 300
7.1 DSP RTOS移植的条件 300
7.2 开发工具 302
7.3 目录和文件 303
7.4 INCLUDES.h头文件 303
7.5 OS_CPU.h头文件 303
7.6 OS_CPU.C文件 304
7.6.1 任务堆栈初始化函数OSTaskStknit() 305
7.6.3 OSTaskDelHook() 310
7.6.2 OSTaskCreatHook() 310
7.6.4 OSTaskSwHook() 311
7.6.5 OSTCBInitHook() 311
7.6.6 OS_CPU_C.C文件小结 311
7.7 OS_CPU_A.ASM文件 312
7.7.1 运行最高级任务函数OSStartHighRdy() 312
7.7.2 任务级任务切换函数OSCtxSw() 313
7.7.3 时钟中断服务程序OSTickSR() 315
7.7.4 中断级任务调度函数OSIntExit() 317
7.8.2 验证OSTaskStkInit()和OSStartHighRdy()函数 318
7.8 测试移植代码 318
7.8.1 确保CCS编译器正常工作 318
7.8.3 测试OSCtxSw()函数 321
7.8.4 测试OSTickISR()函数和OSIntCtxSw()函数 323
第8章 编程实例 326
8.1 实例1 326
8.2 实例2 330
8.3 实例3 334
参考文献 340