首先说明:开发环境Manjaro linux,内核5.0,滚动升级版本,随时都是最新,CCS也是最新的CCv 8
复制代码
1 #include "DSP2833x_DevICe.h" // 这是一个很重要的头文件,决定CPU类型,数据类型、asm宏指令,包含的所有的外设,外设的头文件和其他硬件的抽象头文件
2 #include "DSP2833x_Examples.h" // 该头文件是常用实现函数的文件包含
3 6 //中断服务函数声明
7 __interrupt void wakeint_isr(void);
8
9 //声明全局变量
12 Uint32 WakeCount;
13 Uint32 LoopCount;
14
15 //主函数
18 void main(void)
19 {
20 // Step 1. 初始化系统控制:
22 // 配置PLL,设置cpu时钟
23 // 配置外设时钟
24 // 配置看门狗 该函数在 DSP2833x_SysCtrl.c中.
25 InitSysCtrl();
26
27 // Step 2. 初始化GPIO:
29 // 该函数在 DSP2833x_Gpio.c 中.
32 //InitGpio(); 33
34 // Step 3. 初始化中断:
36 // 禁止CPU中断,该函数在 DSP2833x_Device.h 中 38 DINT;
39
40 // 禁止外设中断
41 // 清理外设中断允许寄存器
42 // 清理外设中断标志寄存器
43 // 禁止CPU中断,设置允许中断位为0
44 // 初始化外设中断向量表
45 // 设置中断函数
46 InitPieCtrl();
47
48 //
49 // Disable CPU interrupts and clear all CPU interrupt flags
50 //
51 IER = 0x0000;
52 IFR = 0x0000;
53
54 //
55 // Initialize the PIE vector table with pointers to the shell Interrupt
56 // Service Routines (ISR).
57 // This will populate the entire table, even if the interrupt
58 // is not used in this example. This is useful for debug purposes.
59 // The shell ISR routines are found in DSP2833x_DefaultIsr.c.
60 // This function is found in DSP2833x_PieVect.c.
61 //
62 InitPieVectTable();
63
64 //
65 // Interrupts that are used in this example are re-mapped to
66 // ISR functions found within this file.
67 //
68 EALLOW; // This is needed to write to EALLOW protected registers
69 PieVectTable.WAKEINT = &wakeint_isr;
70 EDIS; // This is needed to disable write to EALLOW protected registers
71
72 // Step 4. 初始化外设:
74 // 该函数在 DSP2833x_InitPeripherals.c 中
75 //
76 //InitPeripherals(); // Not required for this example
77
78 // Step 5. 用户自己的代码
80 // Clear the counters
84 //
85 WakeCount = 0; // Count interrupts
86 LoopCount = 0; // Count times through idle loop
87
88 //
89 // 将看门狗中断连接到PIE中断,该寄存器首SCM控制,使用特定的修改方式
90 // Write to the whole SCSR register to avoid clearing WDOVERRIDE bit
91 //
92 EALLOW;
93 SysCtrlRegs.SCSR = BIT1;
94 EDIS;
95
96 //
97 // Enable WAKEINT in the PIE: Group 1 interrupt 8
98 // Enable INT1 which is connected to WAKEINT:
99 //
100 PieCtrlRegs.PIECTRL.bit.ENPIE = 1; // Enable the PIE block
101 PieCtrlRegs.PIEIER1.bit.INTx8 = 1; // Enable PIE Group 1 INT8
102 IER |= M_INT1; // Enable CPU int1
103 EINT; // Enable Global Interrupts
104
105 //
106 // Reset the watchdog counter
107 //
108 ServiceDog();
109
110 //
111 // Enable the watchdog
112 //
113 EALLOW;
114 SysCtrlRegs.WDCR = 0x0028;
115 EDIS;
116
117 //
118 // Step 6. 函数执行环节
119 //
120 for(;;)
121 {
122 LoopCount++;
123
124 //
125 // Uncomment ServiceDog to just loop here
126 // Comment ServiceDog to take the WAKEINT instead
127 //
128 //ServiceDog();
129 }
130 }
131
132 // 中断函数
133 // Step 7. Insert all local Interrupt Service Routines (ISRs) and functions
134 // here: If local ISRs are used, reassign vector addresses in vector table as
135 // shown in Step 5
136 //
137
138 //
139 // wakeint_isr -
140 //
141 __interrupt void
142 wakeint_isr(void)
143 {
144 WakeCount++;
145
146 //
147 // Acknowledge this interrupt to get more from group 1
148 //
149 PieCtrlRegs.PIEACK.all = PIEACK_GROUP1;
150 }
复制代码