第一篇:“新时代的人民法典”学习心得笔记
“新时代的人民法典”学习心得笔记
由于内容太过丰富,难以写出全部体会,现仅就有关《民法典》方面,深刻领会老师的讲课精神,再谈些心得体会。
一、民法典的内容:《中华人民共和国民法典》被称为“社会生活的百科全书”,是新中国第一部以法典命名的法律,在法律体系中居于基础性地位,也是市场经济的基本法。《中华人民共和国民法典》共7编、1260条,各编依次为总则、物权、合同、人格权、婚姻家庭、继承、侵权责任,以及附则。
2020年5月28日,十三届全国人大三次会议表决通过了《中华人民共和国民法典》,自2021年1月1日起施行。婚姻法、继承法、民法通则、收养法、担保法、合同法、物权法、侵权责任法、民法总则同时废止。
二、了解了王晨副委员长关于民法典草案的说明:黄瑞老师在讲课中说,编纂民法典一是以习近平同志为核心的党中央作出的重大法治建设部署;二是坚持和完善中国特色社会主义制度的现实需要;三是推进全面依法治国、推进国家治理体系和治理能力现代化的重大举措;四是坚持和完善社会主义基本经济制度、推动经济高质量发展的客观要求;五是增进人民福祉、维护最广大人民根本利益的必然要求。因此,编纂民法典的重大而深远的意义就很明确了。编纂民法典采取“两步走”的工作思路进行:第一步,制定民法总则,作为民法典的总则编;第二步,编纂民法典各分编,再与民法总则合并为一部完整的民法典草案。
三、编纂民法典的指导思想是:紧紧围绕建设中国特色社会主义法治体系、建设社会主义法治国家,总结实践经验,适应时代要求,对我国现行的、制定于不同时期的民法通则、物权法、合同法、担保法、婚姻法、收养法、继承法、侵权责任法和人格权方面的民事法律规范进行全面系统的编订纂修,形成一部具有中国特色、体现时代特点、反映人民意愿的民法典,为新时代坚持和完善中国特色社会主义制度、实现“两个一百年”奋斗目标、实现中华民族伟大复兴中国梦提供完备的民事法治保障。
四、编纂民法典的基本原则:一是坚持正确政治方向,二是坚持以人民为中心,三是坚持立足国情和实际;四是坚持依法治国与以德治国相结合,五是坚持科学立法、民主立法、依法立法,五、5.29日中央政治局集体学习:习近平总书记强调“充分认识颁布实施民法典重大意义,依法更好保障人民合法权益”说明党中央对切实实施民法典十分重视,我们必须好好学习,好好执行。
六、我的体会:
1、民法典是新中国第一部以法典命名的法律,开创了我国法典编纂立法的先河,具有里程碑意义;
2、民法典以人为本更好维护人民权益,人民群众维护自身权益,有法可依,更加有了安全感。
3、民法典内容广泛,涉及到人民群众的方方面面,可以说碰到任何问题都可找民法典解决,这真是我们的福气啊!
第二篇:《人民教育》学习心得
从“影响力教师”袁滨渤身上学到的——读《人民教育》心得体会
实小北院李宁
回顾自己最近阅读过的《人民教育》系列刊物,“袁滨渤”这个名字首先映入脑海,这位“影响力教师”身上有许多值得我学习的地方,她的事迹,没有惊天动地的故事,只有平平凡凡普普通通的工作印记,却留给我意味深长的思考。
袁老师以“笔谈”出名,她所教的学生一届比一届“厉害”,她的学生走向社会后,无论成为“精英”,还是“平民”,身上都有她的影子,那就是“会生活、有尊严、有担当”,由此可见,老师对学生的影响是深远的、是潜移默化的。想成为她这样的老师,以下两点是相当重要的:
感想一:教育要有心
其实在从教之初,任何人都会犯大大小小的错误,难能可贵的是,有心的袁老师能够从细小的事件中发现教育的载体和契机,从而改变了自己“灭火”队员的尴尬境遇。
回想自己的教学经历,确实忽略了一些教育契机。但随着教学经验的积累,我也逐渐学会了从小事寻找教育点。学生上课、升旗时怕冷要戴手套、帽子,这其实是十分不礼貌的行为,因此我在公开课上、在升旗时提醒学生注意;在校园范围内见到碎纸屑,有些学生看不是自己班的卫生区就不管不顾,这时我会提醒学生不要有私心和功利心,爱护环境不分卫生区。
感想二:教育要坚守
平凡的事做好,就是不平凡;简单的事做好,就是不简单,教育同样贵在坚守。在这个信息迅猛发展的时代,袁老师能不为外界所影响,将自己的“笔谈”坚持15年,足见她的耐心和恒心,这种坚守不只是行为,而是一种品质,一种胸怀,一种境界。
记得刚开始从教时,我想通过家访架起家校沟通的桥梁,但是良好的初心并没有取得预想的结果,这和没有坚持执行有很大关系。刚执教二年级时,班上有几个转学生的生字写得很差,甚至有些连捺和撇的方向都分不清,我在开学初下决心要监督他们每天练十个字,刚开始坚持得挺好,可随着教学进度深入,我疏
于督促他们,结果并没有达到我的预期效果。坚守,需要耐心和恒心,这是我需要好好学习的。
“教育”一词的含义,可以很复杂,也可以很简单,复杂到从古至今有无数教育家来撰文论述,简单到可以用两个词来概括——“爱心”和“恒心”,有爱心就会用心、善思、求变;有恒心就会坚持、执着、无惧。作为一名年轻的教育工作者,如何修炼这两颗心是我需要长久研究的课题。
第三篇:新时代人民幸福调查问卷
改革开放以来,随着人民生活水平的改善,特别是中国近几年在经济方面取得的巨大成就,让我们不再为衣食发愁,越来越多的人把提高生活质量作为满足生活需求之后的进一步追求。国民幸福指数(NHI)在继GDP之后被国际组织列入了一个衡量国家综合实力的重要指标。百姓的幸福指数可以监控经济社会运行的整体态势,也可以反映并进一步提民众的生活满意度。它更是反映社会运行状况和民众生活状态的风向标。
21世纪的人们是幸福的,随着科技水平的提高,人们的物质世界和精神世界都有了很大程度的提升,普通百姓也开始享受智能化的生活,生活变得越来越便利。但21世纪的人们也处于危机之中,放假的不断攀升,物价的不断上涨,食品安全问题被频频曝光,以及贫富差距问题等开始出现在人们的脑海里,每个人似乎都上满了发条,疲于奔命。
现如今,全国最具幸福感城市的排名依据居住环境、医疗水平、投资环境、贪腐现象、,医疗水平、教育水平、社会治安、百姓福利、生活成本、交通状况、就业机会、婚姻满意度等11项指标。
调查目的:通过居住地的生活环境,生活水平,百姓福利,教育水平,就业机会和闲暇时间的调查,了解黄岛目前的幸福状况,并了解哪些影响了居民幸福感并探究如何进行改善来增强黄岛的幸福感。
网络问卷人数190人。
性别:
宗教信仰
出行的交通工具
月平均收入
月工作天数
第四篇:STM32学习心得笔记
STM32学习心得笔记
时钟篇
在STM32中,有五个时钟源,为HSI、HSE、LSI、LSE、PLL。
①、HSI是高速内部时钟,RC振荡器,频率为8MHz。
②、HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率范围为4MHz~16MHz。
③、LSI是低速内部时钟,RC振荡器,频率为40kHz。
④、LSE是低速外部时钟,接频率为32.768kHz的石英晶体。
⑤、PLL为锁相环倍频 输出,其时钟 输入 源可选择为HSI/
2、HSE或者HSE/2。倍频可选择为2~16倍,但是其输出频率最大不得超过72MHz。
其中40kHz的LSI供独立看门狗IWDG使用,另外它还可以被选择为实时时钟RTC的时钟源。另外,实时时钟RTC的时钟源还可以选择LSE,或者是HSE的128分频。RTC的时钟源通过RTCSEL[1:0]来选择。
STM32中有一个全速 功能 的 USB 模块,其串行 接口 引擎需要一个频率为48MHz的时钟源。该时钟源只能
从PLL输出端获取,可以选择为1.5分频或者1分频,也就是,当需要使用USB模块时,PLL必须使能,并且时钟频率配置为48MHz或72MHz。
另外,STM32还可以选择一个时钟 信号 输出到MCO脚(PA8)上,可以选择为PLL输出的2分频、HSI、HSE、或者 系统 时钟。
系统时钟SYSCLK,它是供STM32中绝大部分部件工作的时钟源。系统时钟可选择为PLL输出、HSI或者HSE。系统时钟最
大频率为72MHz,它通过AHB分频器分频后送给各模块使用,AHB分频器可选择1、2、4、8、16、64、128、256、512分
频。其中AHB分频器输出的时钟送给5大模块使用:
①、送给AHB 总线、内核、内存和DMA使用的HCLK时钟。
②、通过8分频后送给Cortex的系统 定时器 时钟。
③、直接送给Cortex的空闲运行时钟FCLK。
④、送给APB1分频器。APB1分频器可选择1、2、4、8、16分频,其输出一路供APB1外设使用(PCLK1,最大频率36MHz),另一路送给定时器(Timer)2、3、4倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器2、3、4使用。
⑤、送给APB2分频器。APB2分频器可选择1、2、4、8、16分频,其输出一路供APB2外设使用(PCLK2,最大频率72MHz),另一路送给定时器(Timer)1倍频器使用。该倍频器可选择1或者2倍频,时钟输出供定时器1使用。另外,APB2分频器还有
一路输出供ADC分频器使用,分频后送给ADC模块使用。ADC分频器可选择为2、4、6、8分频。
在以上的时钟输出中,有很多是带使能控制的,例如AHB总线时钟、内核时钟、各种APB1外设、APB2外设等等。当需要使
用某模块时,记得一定要先使能对应的时钟。
需要注意的是定时器的倍频器,当APB的分频为1时,它的倍频值为1,否则它的倍频值就为2。
连接在APB1(低速外设)上的 设备 有: 电源 接口、备份接口、CAN、USB、I2C1、I2C2、UART2、UART3、SPI2、窗口看门狗、Timer2、Timer3、Timer4。注意USB模块虽然需要一个单独的48MHz时钟信号,但它应该不是供USB模块工作的时钟,而只
是提供给串行接口引擎(SIE)使用的时钟。USB模块工作的时钟应该是由APB1提供的。
连接在APB2(高速外设)上的设备有:UART1、SPI1、Timer1、ADC1、ADC2、所有普通IO口(PA~PE)、第二功能IO口。
下图是STM32用户手册中的时钟系统结构图,通过该图可以从总体上掌握STM32的时钟系统。
管脚篇
我们操作STM32过程中对管脚的操作是比较频繁的工作之一,我们一般用提供的封装库来进行操作,因为它直观方便。我们常用的有:
GPIO_SetBits();GPIO_Writebit();GPIO_ResetBits();GPIO_ReadInputBit();GPIO_ReadOutputBit();等等
它们具体怎么操作的我们是不用管的给我们一个接口就足够了,但是想学好STM32下一步最好使用它的原子操作,下面我们先学习一
下关于管脚端口的一些寄存器。由于上述命令操作是调用的一些函数故可能在调用的过程中可能被中断所打断产和 想不到的后果
但是如果调用寄存器函可以在一个时钟周期内完成,所以在一些关键的场合要使用对原子的直接访问。要用到的寄存器有置位复位
寄存器GPIOx_BSRR和复位寄存器GPIOx_BRR,后者是前者的一个子功能,GPIOx_BSRR包括置和复位二功功能高16位是复位功能低16位
是置位功能,高16位中对应位置1表示要复位这一管脚其它写入0的位不改变原有的电平,而低16位置1是真的要使其位输出置1。
对于GPIOx_BRR寄存器写入对应位1时表示要复位输出这一管脚,复位时用哪个寄存器随你便好了,但是要使其置1时只能使用GPIOx_BSRR 了。说到这里你可能要说了:GPIOx_ODR不可以嘛?是真的可以,但是这里的输出0和1都是要反映到管脚是的,对于我们仅需要操作1个
管脚时还要兼顾其它不需要改变的PIN,所以我们最好不要用这个寄存器来进行直接的操作。常用的几个寄存器:
上面的二个寄存器是设置寄存器的是输入还是输出,输入中包括模拟输入、上拉/下拉输入、还是悬空输入。输出包括:
推挽输出、开漏输出、复用推挽输出、复用开漏输出。这个一个在程序初始化时要做的工作,利用封装的函数还是挺好的
这点要是利用寄存器操作就划不来了。
读取端口管脚就是读取
ch = GPIOx->IDR;就是这么简单。
就是把一个16位的管脚值送给这个寄存器如: GPIOx->ODR=ch,如果中改变其中一管脚原来的不变,置1时没有问题可以这样做
GPIOx->ODR |=1< 到目的。用GPIOx->BRR=0x00008000方便些。前面的0x00008000只第15脚而已。 下面贴出复位/置位寄存器和复位寄存器来不说了。 下面通过宏定方,使控制GPIO来的更加方便 #define BITBAND(addr bitnum)((addr & 0xF0000000)+0x2000000+((addr&0xFFFFF)<<5)+(bitnum<<2)) #define MEM_ADDR(addr)*((volatile unsigned long *)(addr)) #define BIT_ADDR(addr bitnum)MEM_ADDR(BITBAND(addr bitnum))//IO #define GPIOA_ODR_Addr(GPIOA_BASE+12)//0x4001080C #define GPIOB_ODR_Addr(GPIOB_BASE+12)//0x40010C0C #define GPIOC_ODR_Addr(GPIOC_BASE+12)//0x4001100C #define GPIOD_ODR_Addr(GPIOD_BASE+12)//0x4001140C #define GPIOE_ODR_Addr(GPIOE_BASE+12)//0x4001180C #define GPIOF_ODR_Addr(GPIOF_BASE+12)//0x40011A0C #define GPIOG_ODR_Addr(GPIOG_BASE+12)//0x40011E0C #define GPIOA_IDR_Addr(GPIOA_BASE+8)//0x40010808 #define GPIOB_IDR_Addr(GPIOB_BASE+8)//0x40010C08 #define GPIOC_IDR_Addr(GPIOC_BASE+8)//0x40011008 #define GPIOD_IDR_Addr(GPIOD_BASE+8)//0x40011408 #define GPIOE_IDR_Addr(GPIOE_BASE+8)//0x40011808 #define GPIOF_IDR_Addr(GPIOF_BASE+8)//0x40011A08 #define GPIOG_IDR_Addr(GPIOG_BASE+8)//0x40011E08 //IO IO!//n 16!#define PAout(n)BIT_ADDR(GPIOA_ODR_Addrn)// #define PAin(n)BIT_ADDR(GPIOA_IDR_Addrn)// #define PBout(n)BIT_ADDR(GPIOB_ODR_Addrn)// #define PBin(n)BIT_ADDR(GPIOB_IDR_Addrn)// #define PCout(n)BIT_ADDR(GPIOC_ODR_Addrn)// #define PCin(n)BIT_ADDR(GPIOC_IDR_Addrn)// #define PDout(n)BIT_ADDR(GPIOD_ODR_Addrn)// #define PDin(n)BIT_ADDR(GPIOD_IDR_Addrn)// #define PEout(n)BIT_ADDR(GPIOE_ODR_Addrn)// #define PEin(n)BIT_ADDR(GPIOE_IDR_Addrn)// #define PFout(n)BIT_ADDR(GPIOF_ODR_Addrn)// #define PFin(n)BIT_ADDR(GPIOF_IDR_Addrn)// #define PGout(n)BIT_ADDR(GPIOG_ODR_Addrn)// #define PGin(n)BIT_ADDR(GPIOG_IDR_Addrn)// #define led0=PAout(8) 使用时可以 led0=0;或者 led0=1;像不像51中的控制。这样led0就可以像51系统中那样控制某一管脚的高低了,是不是很方便。这是比前面的应用 的方便性上更加进了一步,只是前面要做一些提前的预备工作了。 中断和核心的系统控制部分 typedef struct { vuc32 CPUID;//CM3 vu32 ICSR;// vu32 VTOR;// vu32 AIRCR;// vu32 SCR;// vu32 CCR;// vu32 SHPR[3];// vu32 SHCSR;// Handler vu32 CFSR;//MFSR+BFSR+UFSR vu32 HFSR;// fault vu32 DFSR;// fault vu32 MMFAR;// vu32 BFAR;// fault vu32 AFSR;// fault } SCB_TypeDef; 全局中断禁止和允许 在51系统中都有全局中断允许/禁止位,那在Cortex-M3中这个位在哪呢? 这的水很深,请看在Core_m3.h中有 static __INLINE void __enable_irq(){ __ASM volatile(“cpsie i”);} static __INLINE void __disable_irq(){ __ASM volatile(“cpsid i”);} static __INLINE void __enable_fault_irq(){ __ASM volatile(“cpsie f”);} static __INLINE void __disable_fault_irq(){ __ASM volatile(“cpsid f”);} static __INLINE void __NOP(){ __ASM volatile(“nop”);} static __INLINE void __WFI(){ __ASM volatile(“wfi”);} static __INLINE void __WFE(){ __ASM volatile(“wfe”);} static __INLINE void __SEV(){ __ASM volatile(“sev”);} static __INLINE void __ISB(){ __ASM volatile(“isb”);} static __INLINE void __DSB(){ __ASM volatile(“dsb”);} static __INLINE void __DMB(){ __ASM volatile(“dmb”);} static __INLINE void __CLREX(){ __ASM volatile(“clrex”);} 使用前二条__enable_irq();__disable_irq()就可以打开和关闭所有的中断了,这是在库版本在V3.0以上的情况。而对于V2.0则要用 NVIC_SETFAULTMASK(); //关闭总中断 NVIC_RESETFAULTMASK();//开放总中断 来实现了。 DSP学习心得笔记 ----------------白建成.baijc.icekoor 建立新工程过程中: 问题1: “GPIO_Study.c”, line 61: fatal error: could not open source file “DSP280x_Device.h” 1 fatal error detected in the compilation of “GPIO_Study.c”.解决方法: 因为project build optionscompilerpreprocessor中,要包含的头文件的地址没有加进去,你可以找到头文件的地址,然后加进去。 问题2: undefined first referenced symbol in file--------- ----------------_c_int00 D:DSP studytest3DebugDSP280x_CodeStartBranch.obj FS$$MPY D:DSP studytest3DebugDSP280x_CpuTimers.obj FS$$TOL D:DSP studytest3DebugDSP280x_CpuTimers.obj >> error: symbol referencing errors'./Debug/GPIO_Study.out' not built 解决办法都是下面: 这个问题是因为没有加在库文件,请在project build optionslinkerlibraries中加入rts2800.lib。 问题3: >> warning: creating.stack section with default size of 400(hex)words.Use -stack option to change the default size.>> error: can't allocate.stack, size 00000400(page 1)in RAMM1(avail: 00000380)>> error: errors in input-./Debug/GPIO_Study.out not built 解决办法: 这个问题是关于堆栈存储大小的问题,他是说,创建堆栈段使用与设置400个字,并建议在“堆栈操作”中改变这个与设置。这时,需要进行如下修改就可通过:project build optionsLinkerbasic,在Stack Size(-stack):填入800或者其他小于1024的数值。 调试程序: 在编译完成之后,要来下载程序并进行功能调试。FileLoad Program,在工程文件夹下面的Debug文件夹下,选中**.out文件,点击打开,便开始下载程序了。将**.out文件下载到目标板上2812的RAM中。 注意,这里是调试,所以将程序下载到RAM。等到最后您要固化程序的时候,就得下载到FLASH了,因为断电之后,RAM里面所有的数据都会消失。 (Run和Animate的区别,Run是如果遇到断点的话它就停下来了。而Animate就算遇到断点时先停止DSP内核,刷新窗口,然后接着继续启动运行,常用来连续刷新变量窗口和生成graph图形等)——知识储备。 添加断点: 加上断点的方法很简单,只要在该行代码前双击就行。双击之后,这行代码前面会出现一个红色圆块。另外一种添加断点的方法,就是在刚才的编译工具栏上,点一下那个小手图形的按钮,前提是你要把光标移动到想要设置断点的哪一行上。 使用watch window: Watch window的作用是来观察程序运行过程中的各个变量的值。调用watch window的方法是点击菜单栏的“View ”,“watch window”,这时watch window就会显示在CCS下方的信息区域; 选中所要观察的变量,然后右键,在右键菜单中选择add to watch window。 调试代码观察: 我们在调试程序的时候经常想让程序从Main函数开使运行,点DebugGo main。既能看到源文件中代码的执行情况,又能看到汇编指令的执行情况ViewMixed Source/Asm; 关于F2812中用C语言来实现中断的说明 1.首先在.cmd中定位系统中断表: MEMORY { PAGE 0 : ......................................PAGE 1 : ......................................PIE_VECT : origin = 0x000D00, length = 0x000100......................................} SECTIONS {...................................PieVectTable : > PIE_VECT,PAGE = 1.....................................} 2.在C中制定该中断的结构体: #pragma DATA_SECTION(PieVectTable,“PieVectTable”);struct PIE_VECT_TABLE PieVectTable;(在DSP28_GlobalVariableDefs.C中初始化)3.用一组常数(按照中断向量的顺序)初始化该名字为PIE_VECT_TABLE的表: typedef interrupt void(*PINT)(void);这里有些一问,一下应该为函数名?? // Define Vector Table: struct PIE_VECT_TABLE { // Reset is never fetched from this table.// It will always be fetched from 0x3FFFC0 in either // boot ROM or XINTF Zone 7 depending on the state of // the XMP/MC input signal.On the F2810 it is always // fetched from boot ROM.PINT PIE1_RESERVED; PINT PIE2_RESERVED; PINT PIE3_RESERVED; PINT PIE4_RESERVED; PINT PIE5_RESERVED; PINT PIE6_RESERVED; PINT PIE7_RESERVED; PINT PIE8_RESERVED; PINT PIE9_RESERVED; PINT PIE10_RESERVED; PINT PIE11_RESERVED; PINT PIE12_RESERVED; PINT PIE13_RESERVED; // Non-Peripheral Interrupts: PINT XINT13; // XINT13 PINT TINT2; // CPU-Timer2 PINT DATALOG; // Datalogging interrupt PINT RTOSINT; // RTOS interrupt PINT EMUINT; // Emulation interrupt PINT XNMI; // Non-maskable interrupt PINT ILLEGAL; // Illegal operation TRAP PINT USER0; // User Defined trap 0 PINT USER1; // User Defined trap 1 PINT USER2; // User Defined trap 2 PINT USER3; // User Defined trap 3 PINT USER4; // User Defined trap 4 PINT USER5; // User Defined trap 5 PINT USER6; // User Defined trap 6 PINT USER7; // User Defined trap 7 PINT USER8; // User Defined trap 8 PINT USER9; // User Defined trap 9 PINT USER10; // User Defined trap 10 PINT USER11; // User Defined trap 11 // Group 1 PIE Peripheral Vectors: PINT PDPINTA; // EV-A PINT PDPINTB; // EV-B PINT rsvd1_3; PINT XINT1; PINT XINT2; PINT ADCINT; // ADC PINT TINT0; // Timer 0 PINT WAKEINT; // WD ..........................// Group 12 PIE Peripheral Vectors: PINT rsvd12_1; PINT rsvd12_2; PINT rsvd12_3; PINT rsvd12_4; PINT rsvd12_5; PINT rsvd12_6; PINT rsvd12_7; PINT rsvd12_8;};然后在使我们在.cmd文件中定义的表有以上属性: extern struct PIE_VECT_TABLE PieVectTable;(在.h文件中)4.初始化该表(在.c文件中)使之能够为主程序所使用: const struct PIE_VECT_TABLE PieVectTableInit = { PIE_RESERVED, // Reserved space PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,PIE_RESERVED,// Non-Peripheral Interrupts INT13_ISR,// XINT13 or CPU-Timer 1 INT14_ISR,// CPU-Timer2 DATALOG_ISR,// Datalogging interrupt RTOSINT_ISR,// RTOS interrupt EMUINT_ISR,// Emulation interrupt NMI_ISR,// Non-maskable interrupt ILLEGAL_ISR,// Illegal operation TRAP USER0_ISR,// User Defined trap 0 USER1_ISR,// User Defined trap 1 USER2_ISR,// User Defined trap 2 USER3_ISR,// User Defined trap 3 USER4_ISR,// User Defined trap 4 USER5_ISR,// User Defined trap 5 USER6_ISR,// User Defined trap 6 USER7_ISR,// User Defined trap 7 USER8_ISR,// User Defined trap 8 USER9_ISR,// User Defined trap 9 USER10_ISR,// User Defined trap 10 USER11_ISR,// User Defined trap 11 // Group 1 PIE Vectors PDPINTA_ISR,// EV-A PDPINTB_ISR,// EV-B rsvd_ISR,XINT1_ISR,XINT2_ISR,ADCINT_ISR,// ADC TINT0_ISR,// Timer 0 WAKEINT_ISR,// WD..........................// Group 12 E Vectors rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,rsvd_ISR,};//-------------// InitPieVectTable: //-------------// This function initializes the PIE vector table to a known state.// This function must be executed after boot time.// void InitPieVectTable(void){ int16 i;Uint32 *Source =(void *)&PieVectTableInit;Uint32 *Dest =(void *)&PieVectTable; EALLOW; for(i=0;i < 128;i++)*Dest++ = *Source++;EDIS; // Enable the PIE Vector Table PieCtrl.PIECRTL.bit.ENPIE = 1; } 5.中断服务程序: 让以上的数值指向你所要的服务程序,例如: PieVectTable.TINT2 = &ISRTimer2;那么,ISRTimer2也就成了中断服务程序,×××切记:一定要在主程序的开始先声明该程序: interrupt void ISRTimer2(void); ..........................然后按照您的需要编制该程序: interrupt void ISRTimer2(void){ CpuTimer2.InterruptCount++;} 编程中遇到的问题: 1、line 257: warning: last line of file ends without a newline; 解决方法: 点击出现的问题条,看光标定位在哪里,然后一点点删除,直到把编程的文字删除,最后把删除的写出来,回车就行了,因为回车的格式要在编辑状态哈哈! 28016的定时器笔记 学过2812的人会知道,2812的定时器和28016的定时器的寄存器很不一样。但是从功能上将差不多。 关于28016定时器的时钟的讨论; 定时器的时钟是由SYSCLKOUT经过TBCTL中的CLKDIV和HSPCLKDIV进行配置; 和 主要说明,我们应该记得SYSCLKOUT和HSPCLK之间还可以分频,但是在这里这个寄存器不影响。 关于28016定时器的时钟同步的讨论; 如果我们想使每个PWM模块具有同步时钟,我们可以通过软件强制各个模块之间同步,设定步骤如下: EPwm1Regs.TBCTL.bit.SYNCOSEL = 0 // Pass through EPwm2Regs.TBCTL.bit.SYNCOSEL = 0;// Pass through EPwm3Regs.TBCTL.bit.SYNCOSEL = 0;// Pass through EPwm1Regs.TBCTL.bit.SWFSYNC = 1; EPwm2Regs.TBCTL.bit.SWFSYNC = 1; EPwm3Regs.TBCTL.bit.SWFSYNC = 1;以上程序是设定PWM1/2/3同步,我们由于我们只采用向上计数,所以不需要设定计数方向位。 接下来如果我们想PWM1与PWM2输出相位不一样,保持某个相位差,我们可以通过寄存器设定; EPwm1Regs.TBCTL.bit.PHSEN = TB_ENABLE; EPwm2Regs.TBCTL.bit.PHSEN = TB_ENABLE; EPwm3Regs.TBCTL.bit.PHSEN = TB_ENABLE; EPwm1Regs.TBPHS.half.TBPHS = 0; EPwm2Regs.TBPHS.half.TBPHS = 250; EPwm3Regs.TBPHS.half.TBPHS = 500;首先使能,然后赋予值; 关于一些其他的配置如下: EPwm3Regs.TBPRD = PWM3_TIMER_TBPRD; EPwm3Regs.TBCTL.bit.CTRMODE = TB_COUNT_UP; // Count up EPwm3Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Enable INT on Zero event EPwm3Regs.ETSEL.bit.INTEN = PWM3_INT_ENABLE; // Enable INT EPwm3Regs.ETPS.bit.INTPRD = ET_1ST; // Generate INT on 3rd event 关于28016PWM配置的讨论 PWM1的A/B的独立配置; 除了counter-compare比较寄存器,CMPA,CMPB,主要还是配置控制寄存器CMPCTL,对于影子寄存器的配置,还有影子寄存器的装载模式。这里主要讲关于PWM中action qualifier的配置; 模式1: // Setup shadow register load on ZERO EPwm1Regs.CMPCTL.bit.SHDWAMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.SHDWBMODE = CC_SHADOW; EPwm1Regs.CMPCTL.bit.LOADAMODE = CC_CTR_ZERO; EPwm1Regs.CMPCTL.bit.LOADBMODE = CC_CTR_ZERO; // Set Compare values EPwm1Regs.CMPA.half.CMPA = EPWM1_MIN_CMPA; // Set compare A value EPwm1Regs.CMPB = 500; // Set Compare B value // Set actions EPwm1Regs.AQCTLA.bit.ZRO = AQ_CLEAR; // Set PWM1A on Zero EPwm1Regs.AQCTLA.bit.CAU = AQ_SET; // Clear PWM1A on event A, up coun EPwm1Regs.AQCTLB.bit.ZRO = AQ_SET; // Set PWM1B on Zero EPwm1Regs.AQCTLB.bit.CBU = AQ_CLEAR; // Clear PWM1B on event B, up count // Interrupt where we will change the Compare Values EPwm1Regs.ETSEL.bit.INTSEL = ET_CTR_ZERO; // Select INT on Zero event EPwm1Regs.ETSEL.bit.INTEN = 1; // Enable INT EPwm1Regs.ETPS.bit.INTPRD = ET_3RD; // Generate INT on 3rd event 其中红色的为PWM的输出方式配置,当PWM1.A在counter==0时,输出为0,在counter==CMPA时,且在向上计数,输出为1;而PWM1.B相反。 模式二: // Set actions EPwm2Regs.AQCTLA.bit.PRD = AQ_CLEAR; // Clear PWM2A on Period EPwm2Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM2A on event A, up count EPwm2Regs.AQCTLB.bit.PRD = AQ_CLEAR; // Clear PWM2B on Period EPwm2Regs.AQCTLB.bit.CBU = AQ_SET; // Set PWM2B on event B, up count 其中红色的为PWM的输出方式配置,当PWM1.A在counter==period时,输出为0,在counter==CMPA时,且在向上计数,输出为1;而PWM1.B相同; 模式三: // Set Actions EPwm3Regs.AQCTLA.bit.CAU = AQ_SET; // Set PWM3A on event B, up count EPwm3Regs.AQCTLA.bit.CBU = AQ_CLEAR; // Clear PWM3A on event B, up count 其中红色的为PWM的输出方式配置,当PWM1.A在counter==CMPA时,输出为1,在counter==CMPB时,且在向上计数,输出为0,也就是计数在CMPA与CMPB之间时输出为1; 模式四: EPwm3Regs.AQCTLB.bit.ZRO = AQ_TOGGLE; // Toggle EPWM3B on Zero 此模式强制整个周期输出高或者输出地,与CMPA与CMPB无关,关于28016PWM死区时间配置的讨论 主要与死区有关的是三个寄存器: Dead-Band Generator Control Register(DBCTL); Dead-Band Generator Rising Edge Delay Register(DBRED); Dead-Band Generator Rising Edge Delay Register(DBRED)Field Descriptions; 首先清楚延时时间的计算 为:DBRED*TBCLK; 然后弄懂DBCTL就可以了。 注意理解下图: 弄懂3个控制位什么意思; OUT_MODE,POLSEL,IN_MODE 注意第二位,这位通常用在输入为同一个通道时,也就是IN_MODE=0X00/0X03时。简单看一些deadband的配置: EPwm1Regs.DBCTL.bit.OUT_MODE = DB_FULL_ENABLE;输出之前,输入上升沿下降沿都被延时; EPwm1Regs.DBCTL.bit.POLSEL = DB_ACTV_HI;没有取反过程; EPwm1Regs.DBCTL.bit.IN_MODE = DBA_ALL;输入全部为A,此为习惯性的配置; EPwm1Regs.DBRED = 1000;EPwm1Regs.DBFED = 500; 一周解决的为题: 我的sin()函数能够正常执行,cos()函数也能正常执行,但是当sin()计算完再计算cos(),仿真环境就会进入逻辑错误中断,请问怎么解决,是不是该重装CCS。 原因:之前一直把程序烧到RAM里,总是只能执行一个sin()和cos()函数,然后RAM的空间就不够了,由于也不会改RAM空间的大小,所以就把程序直接下到flash里面,结果就好了。 遇到CCS和仿真器连不上的问题;Error connecting to the target: Error 0x80000240/134 Fatal Error during: Initialization, OCS Unknown Error Sequence ID: 0 Error Code: 134 Error Class: 0x80000240 I/O Port = 240 解决办法: 我也试着解决这个问题,重装了一次,结果没有用。想着觉得是USB驱动的问题,然后就在设备管理器中,把USB的驱动删除了,有重新装了一遍,结果没问题了。原因应该是以前用的USB口安装的驱动,又被用于安装其他的驱动,结果以前的USB驱动不能用了。第五篇:DSP学习心得笔记