主题中讨论的其他器件:HALCOGEN
您好!
我正在尝试使用运行程序的 N2HET 进行开发、然后使用 HTU 将数据传输到 ARM CPU。 我已经使 N2HET 工作、现在我要尝试使 HTU 工作。 我一直在研究生成正弦波的示例(在处理器的文档页面上)。 对我来说、发生的事情很有意义、我已经为我的应用编写了非常类似的内容、我将其用作"测试台"(我甚至将正弦波项目加载到 CCS 中、但这些内容也不起作用、 但我没有检查以确保在映射到寄存器地址等方面一切都是相同的)。 想知道是否有人可以看到我编写的代码是否有任何问题。 在过去的几天里,我一直在用桌上的东西打我的头……
此外、我不使用 HalCoGen 代码、因为这不是我现在可以用于这个项目的东西(出于某种原因、我喜欢从头写入这些东西)、但希望寄存器名称有意义。
该程序将仅使用 N2HET2 (作为一个控制、而不使用 THU)以75%占空比运行 PWM。 N2HET1默认以25%的速度运行(程序最初写入 RAM)、但是一个周期之后、HET 应该在一个新的占空比中从内存中获得一个新的值。 问题是它没有得到值。 它保持在默认占空比。
希望这已经足够了、并且看起来不会很痛苦、但是如果它不让我知道、我会提供我能提供的东西。
主程序:
int main (void){ // *初始化 HTU */ DCP1REG->DCPx[0].ITCOUNT =(1 << 16)|(1 << 0);//执行单个元素传输和单个帧传输 DCP1REG->DCPx[0]。IHADDRCT =(1 << 23)|内存已读出/ MEMHET。 (1 << 18)|//设置为循环缓冲模式 (24 <<2);//设置初始 NHET 地址(ECMP 的数据字段为地址6) DCP1REG->DCPx[0].IFADDRA =(uint32_t)&data;//设置主存储器 DCP1REG->CDCPx[0].CFADDRA = 0;//清除当前地址 DCP1REG[0].UCP1ENA ;//清除当前地址计数 //启用 DCP[0]控制数据包 A HET1REG->GCR =(1 << 16);//启用 HTU1 // *初始化 N2HET * HTU 连接到 N2HET1 */ HET1REG->DIR |=(1 << 0);//启用 N2HET1[0]引脚以实现输出 |<<->HET1|=(0); //为输出启用 N2HET2[0]引脚 //设置分辨率预分频 器 n2het1_hr_set (0); n2het1_LR_set (6); n2het2_hr_set (0); n2het2_LR_set (6); HET1REG->REQENS |=(1 << 0);//在第0行启用请求 //用于 N2HET 初始化的等效代码 //HET1REG->GCR |=(1 << 24)|//打开引脚 //(1 << 17)|//忽略暂挂(待办事项:查看是否需要...) //(1 << 16));//设置为主模式(TODO:查看是否需要...) //将程序放入内存 //memcpy ((void *)&HET1RAM、(const void *) het1_instructions、sizeof (het1_instructions); //HET1REG->GCR |=(1 << 0);//启用 N2HET1外设 n2het1_init (n2HET_init); n2het2_init (n2HET_prgm); while (1){ } 返回0; }
HET 程序(不能在这台计算机上安装汇编器、但我检查了 HET1程序很多次、看起来应该是什么):
//为 N2HET1外设 const het_memory_t het1_instructions[]={ { //请求编号= 0、下一个地址= 1、寄存器= a // 000000 000 0 00001 0110 0 00 0000 0 // 0000 0000 0000 0000 0010 1100 2C0000 //程序 0x000000、 //请求类型=常规,最大计数= 0x270 // 000 01 0 0000000000000001001110000 // 0000 1000 0000 0000 0010 0111 0000 //控制 0x08000270, //数据 0x00000000, //保留 0x00000000 }, { //下一个地址= 0,hr_lr = 0,操作引脚启用= true, 引脚选择= 0、操作=脉冲高电平、 //寄存器= A、比较值= 0xEA60 // 000000 000 0000000000000 0000 0 0 000000 // 0000 0000 0000 0000 0000 0000 0000 0000 0000 //程序 0x00000000, // 000 00 0 000 1 000000000 00000 0 1 0 11 00 0 // 0000 0000 0100 0000 0000 0101 1000 //控制 0x00400058, //数据 0x0000EA60, //保留 0x00000000 } ; //将指令存储器和指令类型默认值放入联合体 //这更方便易用。 指令存储器和 //程序结构将占用相同的存储器空间。 typedef union{ het_memory_t instr_memory[HET1_length]; struct{ CNT L00; MCMP L01; }program_strt; }het1_program; //实际实例化程序 volatile het1_program het1_program_load;
谢谢