void initTIMER0(void) { // 设置中断控制寄存器 CSR&=0xfffe; asm(" NOP 2 "); TIMER0_TGCR=0x00000015; //采用32位独立定时器12 TIMER0_TIM34=0; TIMER0_PRD12=0x00ffffff; //周期值,改变其值的大小可以改变灯的亮灭频率 TIMER0_INTCLSTAT=0x3;//开定时器中断 TIMER0_TRC=0x00000080;//开定时器0 INTmux1=0x0400; // 指定ADINT到中断6 // 关中断 GIE=0 ISTP=0x80000000; // 重置中断向量表到0C00h ICR=0xfff0; ISR=0x0; // 清除等待的中断 IER=0xffff; // 使能ADINT中断 // CSR=CSR|1; // 开中断/* */ }
时间: 2024-04-05 18:33:49 浏览: 9
这段代码是DSPC6747中的Timer0模块的初始化函数。该函数实现了以下功能:
1. 禁止中断控制寄存器中的最低位,即开启总中断。
2. 设置Timer0模块的时钟源为CPU时钟,采用32位独立定时器12。
3. 设置Timer0的计数值为0x00ffffff,周期值,改变其值的大小可以改变灯的亮灭频率。
4. 开启定时器0产生的中断,并将中断状态清零。
5. 开启定时器0模块,并指定ADINT到中断6。
6. 重置中断向量表到0xC00h。
7. 清除等待的中断,并使能ADINT中断。
需要注意的是,这段代码中开启了总中断,可以在需要时根据具体需求禁用总中断。同时,该函数只是Timer0模块的初始化函数,如果需要使用Timer1模块,需要编写相应的初始化函数。
相关问题
void initTIMER1(void) { // 禁止中断控制寄存器中的最低位,即开启总中断。 CSR &= ~1; asm(" NOP 2 "); // 设置Timer1模块的时钟源为CPU时钟,采用32位独立定时器12。 TIMER1_TGCR = 0x00000015; // 设置Timer1的计数值为0x00ffffff,周期值,改变其值的大小可以改变灯的亮灭频率。 TIMER1_PRD12 = 0x00ffffff; // 开启定时器1产生的中断,并将中断状态清零。 TIMER1_INTCLSTAT = 0x3; // 开启定时器1模块,并指定ADINT到中断6。 TIMER1_TRC = 0x00000080; INTmux1 = 0x0400; // 重置中断向量表到0xC00h。 ISTP = 0x80000000; ICR = 0xfff0; ISR = 0x0; // 清除等待的中断,并使能ADINT中断。 IER = 0xffff;}这个如何设置到ADINT中断4
要将DSPC6747内部Timer1模块的中断重新分配给中断4(ADINT),可以使用以下代码:
```c
void initTIMER1(void) {
// 禁止中断控制寄存器中的最低位,即开启总中断。
CSR &= ~1;
asm(" NOP 2 ");
// 设置Timer1模块的时钟源为CPU时钟,采用32位独立定时器12。
TIMER1_TGCR = 0x00000015;
// 设置Timer1的计数值为0x00ffffff,周期值,改变其值的大小可以改变灯的亮灭频率。
TIMER1_PRD12 = 0x00ffffff;
// 开启定时器1产生的中断,并将中断状态清零。
TIMER1_INTCLSTAT = 0x3;
// 将INTMUX1寄存器的值设置为0x0401,将Timer1的中断分配给中断4(ADINT)。
INTmux1 = 0x0401;
// 重置中断向量表到0xC00h。
ISTP = 0x80000000;
ICR = 0xfff0;
ISR = 0x0;
// 清除等待的中断,并使能ADINT中断。
IER = 0xffff;
}
```
需要注意的是,在将Timer1的中断分配给中断4之前,需要将中断向量表重置到0xC00h,否则中断分配可能会失败。
#include "uart.h" /* 函数功能:串口0初始化 */ void Init_Uart0(void) { PERCFG&=~(1<<0); //串口0的引脚映射到位置1,即P0_2和P0_3 //PERCFG :外设控制寄存器 P0SEL|=0x3<<2; //将P0_2和P0_3端口设置成外设功能 //P0SEL :端口 0 功能选择寄存器 U0BAUD = 216; //32MHz的系统时钟产生115200BPS的波特率 U0GCR&=~(0x1F<<0);//清空波特率指数 U0GCR|=11<<0; //32MHz的系统时钟产生115200BPS的波特率 U0UCR |= 0x80; //禁止流控,8位数据,清除缓冲器 U0CSR |= 0x3<<6; //选择UART模式,使能接收器 }解释代码
这段代码是在进行串口0的初始化,具体解释如下:
```c
#include "uart.h" // 引入头文件,可能包含了一些与串口相关的常量和函数声明
void Init_Uart0(void) {
PERCFG &= ~(1 << 0); // 清除 PERCFG 寄存器的第 0 位,将串口0的引脚映射到位置 1,即P0_2和P0_3
// PERCFG :外设控制寄存器
P0SEL |= 0x3 << 2; // 将 P0_2 和 P0_3 端口设置成外设功能
// P0SEL :端口 0 功能选择寄存器
U0BAUD = 216; // 32MHz 的系统时钟产生 115200bps 的波特率
// U0BAUD :串口0波特率控制寄存器
U0GCR &= ~(0x1F << 0); // 清空波特率指数
U0GCR |= 11 << 0; // 32MHz 的系统时钟产生 115200bps 的波特率
// U0GCR :串口0波特率发生器控制寄存器
U0UCR |= 0x80; // 禁止流控,8位数据,清除缓冲器
// U0UCR :串口0控制寄存器
U0CSR |= 0x3 << 6; // 选择 UART 模式,使能接收器
// U0CSR :串口0状态寄存器
}
```
这段代码主要的作用是对串口0进行初始化,使其能够正常工作。其中,通过设置 PERCFG 寄存器、P0SEL 寄存器、U0BAUD 寄存器、U0GCR 寄存器、U0UCR 寄存器和 U0CSR 寄存器的值,分别实现了以下功能:
- 将串口0的引脚映射到位置1,即P0_2和P0_3
- 将 P0_2 和 P0_3 端口设置成串口功能
- 设置波特率为 115200bps
- 选择波特率指数为 11,实现 115200bps 的波特率
- 禁止流控,设置数据位数为 8 位,清除缓冲器
- 选择UART模式,使能接收器