活动介绍

C:\Users\lmx\Anaconda3\python.exe C:/Users/lmx/PycharmProjects/pythonProject/1.py Traceback (most recent call last): File "C:/Users/lmx/PycharmProjects/pythonProject/1.py", line 539, in <module> main(demand_file=demand_file, depot_file=depot_file, epochs=250, v_cap=3) File "C:/Users/lmx/PycharmProjects/pythonProject/1.py", line 503, in main res1 = local_search_one(crowd_route_list1, route_list1, sol, model, node) File "C:/Users/lmx/PycharmProjects/pythonProject/1.py", line 424, in local_search_one a1 = checkPriority(owncar_route) File "C:/Users/lmx/PycharmProjects/pythonProject/1.py", line 273, in checkPriority if route[i] <= 16: TypeError: '<=' not supported between instances of 'str' and 'int'

时间: 2024-01-10 13:02:49 浏览: 145
这个错误是因为你在对一个字符串和整数进行比较时使用了 `<=` 操作符,但这两种类型是不可比较的。 你需要检查一下你的 `route` 这个列表中的元素类型是否正确。如果其中包含了字符串类型的元素,你需要将它们转换为整数类型或者将整数类型的元素转换为字符串类型,以保证它们能够正确比较。例如: ```python if int(route[i]) <= 16: # 执行相关操作 ``` 或者 ```python if str(route[i]) <= '16': # 执行相关操作 ```
相关问题

Traceback (most recent call last): File "C:/Users/lmx/PycharmProjects/pythonProject/1.py", line 579, in <module> main(demand_file=demand_file, depot_file=depot_file, v_cap=3) File "C:/Users/lmx/PycharmProjects/pythonProject/1.py", line 541, in main res1 = local_search_one(crowd_route_list1, route_list1, sol, model, node) File "C:/Users/lmx/PycharmProjects/pythonProject/1.py", line 448, in local_search_one a1 = checkPriority(owncar_route) File "C:/Users/lmx/PycharmProjects/pythonProject/1.py", line 276, in checkPriority if int(route[i]) <= 16: ValueError: invalid literal for int() with base 10: 'd1'

这个错误是因为代码中尝试将字符串 'd1' 转换为整数时出错,因为 'd1' 不是一个有效的数字字符串。 根据你提供的代码,这个错误可能是在 `checkPriority` 函数中的第 7 行代码引起的,因为该行代码尝试将 `route[i]` 转换为整数。你需要检查 `route` 列表中 `route[i]` 是否包含有效的数字字符串。如果不是,你需要找到原因并修复它。 你可以在代码中添加一些调试语句,例如使用 `print` 函数输出相关变量的值,以便找到错误的原因。还可以使用 Python 的调试器(pdb)来逐行执行代码并查看变量的值,以更深入地了解代码的执行过程。

Traceback (most recent call last): File "C:/Users/lmx/PycharmProjects/pythonProject/1.py", line 589, in <module> main(demand_file=demand_file, depot_file=depot_file, v_cap=3) File "C:/Users/lmx/PycharmProjects/pythonProject/1.py", line 551, in main res1 = local_search_one(crowd_route_list1, route_list1, sol, model, node) File "C:/Users/lmx/PycharmProjects/pythonProject/1.py", line 453, in local_search_one owncar_route.index(0, 'd1') TypeError: slice indices must be integers or have an __index__ method

这个错误通常出现在使用列表的index()方法时参数不正确。根据错误提示,你传递给了`owncar_route.index()`方法的参数是`(0, 'd1')`,这个参数是一个元组,其中包含两个元素,第一个元素是0,第二个元素是字符串'd1'。 然而,列表的index()方法只接受一个参数,并且这个参数必须是一个整数类型或者实现了__index__方法的对象。因此,当你传递一个元组作为参数时,就会出现“TypeError: slice indices must be integers or have an __index__ method”这个错误。 要解决这个问题,你需要检查代码中使用`owncar_route.index()`方法时传递的参数是否正确,确保它是一个整数或者实现了__index__方法的对象。
阅读全文

相关推荐

uint8_t set_pll_fre(double fre) { if(fre<5) { return 0; } //lmx.R46.MASH_EN=1; if(fre<=3550) { lmx.R31.VCO_DISTA_PD=1; //3550频率以下使用分频器,故而关断vco->outa 之间的buf// lmx.R34.CHDIV_EN=1; //输出通道分频器总开关开启// lmx.R47.OUTA_MUX=0; //VCO经过分频器输出// lmx.R35.CHDIV_SEG1_EN=1; lmx.R35.CHDIV_SEG2_EN=1; lmx.R35.CHDIV_SEG3_EN=1; lmx.R30.VCO_2X_EN=0; //VCO输出倍频器关闭// if(fre<=30) //vco 3550-5760// { lmx.R35.CHDIV_SEG1=CHDIV1_3; //输出通道分频器选择// lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_8; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL123; //分频通道激活个数// plldat.chdiv_total=192; //lmx.R46.MASH_EN=0; } else if(fre<=50) //vco 3840-6400// { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_8; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL123; plldat.chdiv_total=128; } else if(fre<=70) //vco 4800-6720// { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_6; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL123; plldat.chdiv_total=96; } else if(fre<=100) //vco 4480-6400// { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_4; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL123; plldat.chdiv_total=64; } else if(fre<=110)//vco 4800-5280// { lmx.R35.CHDIV_SEG1=CHDIV1_3; lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_2; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL123; plldat.chdiv_total=48; } else if(fre<=150)//vco 3960-5400// { lmx.R35.CHDIV_SEG1=CHDIV1_3; lmx.R35.CHDIV_SEG2=CHDIV23_6; lmx.R36.CHDIV_SEG3=CHDIV23_2; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL123; plldat.chdiv_total=36; } else if(fre<=190)//vco 4800-6080// { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_2; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL123; plldat.chdiv_total=32; } else if(fre<=230)//vco 4560-5520/ { lmx.R35.CHDIV_SEG1=CHDIV1_3; lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL12; plldat.chdiv_total=24; } else if(fre<=300)//vco 3680-4800/ { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL12; plldat.chdiv_total=16; } else if(fre<=460)//vco 3600-5520/ { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_6; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL12; plldat.chdiv_total=12; } else if(fre<=610)//vco 3680-4880/ { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_4; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL12; plldat.chdiv_total=8; } else if(fre<=930)//vco 3660-5580// { lmx.R35.CHDIV_SEG1=CHDIV1_3; lmx.R35.CHDIV_SEG2=CHDIV23_2; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL12; plldat.chdiv_total=6; } else if(fre<=1240)//vco 3720-4960// { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_2; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL12; plldat.chdiv_total=4; } else if(fre<=1840)//vco 3720-5520// { lmx.R35.CHDIV_SEG1=CHDIV1_3; lmx.R35.CHDIV_SEG2=CHDIV23_1; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL1; plldat.chdiv_total=3; } else if(fre<=3550)//vco 3680-7100// { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_1; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL1; plldat.chdiv_total=2; } } else if(fre<=7100) { lmx.R31.VCO_DISTA_PD=0; //3550频率以上使用vco输出// lmx.R34.CHDIV_EN=0; //输出通道分频器总开关开启// lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL_PD; //vco输出分频器各阶段失能// lmx.R47.OUTA_MUX=1; //VCO不经过分频器,直接输出// lmx.R35.CHDIV_SEG1_EN=0; //vco输出分频器各阶段失能// lmx.R35.CHDIV_SEG2_EN=0; lmx.R35.CHDIV_SEG3_EN=0; lmx.R30.VCO_2X_EN=0; //VCO输出倍频器关闭// plldat.chdiv_total=1; } else if(fre<10000) { lmx.R31.VCO_DISTA_PD=0; //3550频率以上使用vco输出// lmx.R34.CHDIV_EN=0; //输出通道分频器总开关开启// lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL_PD; //vco输出分频器各阶段失能// lmx.R47.OUTA_MUX=1; //VCO不经过分频器,直接输出// lmx.R35.CHDIV_SEG1_EN=0; //vco输出分频器各阶段失能// lmx.R35.CHDIV_SEG2_EN=0; lmx.R35.CHDIV_SEG3_EN=0; lmx.R30.VCO_2X_EN=1; //VCO输出倍频器开启// plldat.chdiv_total=0.5; } ////////////////////////////////////////////////////////////////////////////////// //设定PFD频率,OSC=25MHz,PFD默认200MHz// lmx.R9.OSC_2X=1; lmx.R12.PLL_R_PRE=1; lmx.R10.MULT=4; lmx.R11.PLL_R=1; plldat.pfd_fre=200; lmx.R13.PFD_CTL=0;//3; //PFD频率200MHz时,使用Single PFD 模式// ////////////////////////////////////////////////////////////////////////////////// double vcofre; vcofre=fre*plldat.chdiv_total; //计算要达到指定的频率,那么VCO应得到的频率// plldat.vcofre=vcofre; double n; uint16_t N; //需要计算的整数部分分频值,最小值为9// if(lmx.R30.VCO_2X_EN) //如果vco倍频器开启,PLL_N_PRE会强制成为4分频// { lmx.R37.PLL_N_PRE=1; //主动写入一次增加可靠性,(4分频)// plldat.PreN=4; n=2*vcofre/plldat.pfd_fre; if(n<36) { lmx.R9.OSC_2X=0; plldat.pfd_fre=100; n=2*vcofre/plldat.pfd_fre; lmx.R13.PFD_CTL=0; //PFD频率100MHz时,使用Dual PFD模式// } n=n/4; } else { n=vcofre/plldat.pfd_fre; if(n<18) { lmx.R9.OSC_2X=0; plldat.pfd_fre=100; n=vcofre/plldat.pfd_fre; lmx.R13.PFD_CTL=0; //PFD频率100MHz时,使用Dual PFD模式// } lmx.R37.PLL_N_PRE=0; //PLL_N_PRE(2分频)// plldat.PreN=2; n=n/2; } N=(uint16_t)(n); //取得整数部分// lmx.R38.PLL_N=N; plldat.N=N; N_2_MASH_ORDER(N); //根据N值计算可用的mash order及pfd dly// n=n-N; //得到小数部分// uint16_t nume,deno; if(n==0) { nume=0; deno=1; } else { //pll器件小数相关寄存器取16位(65535极值),因此按照60000比例放大在进行化简分数// nume=(uint16_t)round(n*60000); deno=60000; //分子分母一起放大60000倍// simplify_fraction(&nume,&deno); } lmx.R45.REG45=nume; lmx.R44.REG44=0; lmx.R41.REG41=deno; lmx.R40.REG40=0; plldat.nume=nume; plldat.deno=deno; //根据PFD频率修正R0因子// if(plldat.pfd_fre<=20) { lmx.R0.FCAL_HPFD_ADJ=0; if(plldat.pfd_fre<=5) { lmx.R0.FCAL_LPFD_ADJ=3; } else if(plldat.pfd_fre<=10) { lmx.R0.FCAL_LPFD_ADJ=2; } else if(plldat.pfd_fre<=20) { lmx.R0.FCAL_LPFD_ADJ=1; } else { lmx.R0.FCAL_LPFD_ADJ=0; } } else if(plldat.pfd_fre>=100) { lmx.R0.FCAL_LPFD_ADJ=0; if(plldat.pfd_fre>200) { lmx.R0.FCAL_HPFD_ADJ=3; } else if(plldat.pfd_fre>150) { lmx.R0.FCAL_HPFD_ADJ=2; } else if(plldat.pfd_fre>100) { lmx.R0.FCAL_HPFD_ADJ=1; } else { lmx.R0.FCAL_HPFD_ADJ=0; } } else { lmx.R0.FCAL_HPFD_ADJ=0; lmx.R0.FCAL_LPFD_ADJ=0; } if(FOSC<=200) { lmx.R1.CAL_CLK_DIV=0; } else if(FOSC<=400) { lmx.R1.CAL_CLK_DIV=1; } else if(FOSC<=800) { lmx.R1.CAL_CLK_DIV=2; } else { lmx.R1.CAL_CLK_DIV=3; } //lmx.R64.FCAL_FAST=1; //lmx.R64.ACAL_FAST=1; //lmx_wr(64,lmx.R64.REG64); save_lmx_all_reg(); //所有修改写入器件寄存器// lmx.R0.FCAL_EN=1; lmx_wr(0,lmx.R0.REG0); return 1; //lmx.R34.REG34=50160; //lmx_wr(34,lmx.R34.REG34); }解释一下

#include "stm32f1xx_hal.h" #include "LMX_SPI_GPIO.H" #include "math.H" _PLL_DAT plldat; _LMX2592_REG lmx; _MASH_ORDERN mashorder[5]={1,0,0,1,1,0,2,2,0,2,3,0,8,4,0}; //nCount为要延时的us数. void spi_delay(volatile uint32_t nCount) { for(; nCount != 0; nCount--); } //GPIO spi模式下,sck脉冲时序// uint8_t sck_pulse(uint8_t dat) { uint8_t so; //SCK 上升沿前将数据送上// if(dat) { MOSI_H } else { MOSI_L } spi_delay(5); SCK_H spi_delay(5); //上升沿后微小延时,读取MISO数据// so=HAL_GPIO_ReadPin(SCK_MISO); SCK_L return so; } //送出8个spi脉冲,同时将8位数据送出和回读,MSB// uint8_t spi_8bit(uint8_t dat) { uint8_t loop,mo; uint8_t mi=0; //回读数据,初始化为0// for(loop=0;loop<8;loop++) { mo=dat&0x80; mi=mi<<1; if(mo) { mi=mi|sck_pulse(1); } else { mi=mi|sck_pulse(0); } dat=dat<<1; } return mi; } //送出16个spi脉冲,同时将16位数据送出和回读,MSB// uint16_t spi_16bit(uint16_t dat) { uint8_t loop; uint16_t mi=0,mo; //回读数据,初始化为0// for(loop=0;loop<16;loop++) { mo=dat&0x8000; mi=mi<<1; if(mo) { mi=mi|sck_pulse(1); } else { mi=mi|sck_pulse(0); } dat=dat<<1; } return mi; } //对器件进行写操作,输入为寄存器地址,和对其写入的数据// void lmx_wr(uint8_t regadr,uint16_t dat) { regadr=regadr&0x7f; //将寄存器地址最高位置0,确保为写操作// CSB_LE_L //片选信号拉低// SCK_L spi_delay(5); spi_8bit(regadr); //送出地址// spi_16bit(dat); //送出数据// spi_delay(5); CSB_LE_H //片选失效// } //对器件进行读操作,输入为寄存器地址,返回读出的数据// uint16_t lmx_rd(uint8_t regadr) { uint16_t rddat; regadr=regadr|0x80; //将寄存器地址最高位置1,确保为读操作// CSB_LE_L //片选信号拉低// SCK_L spi_delay(5); spi_8bit(regadr); //送出地址// rddat=spi_16bit(0); //送出16位无效数据,用于回读寄存器数据// spi_delay(5); CSB_LE_H //片选失效// return rddat; } //初始化LMX器件// void init_lmx_device(void) { lmx_wr(0,0x0002); //软件复位LMX器件// spi_delay(5000); load_lmx_all_reg(); //将所有寄存器读入内存结构体中// lmx.R31.VCO_DISTA_PD=0; //OUTA的VCO 输出通路开启// lmx.R31.CHDIV_DIST_PD=0; //通道分频器总开关开启// lmx.R31.VCO_DISTB_PD=1; //OUTB的VCO 输出通路关闭// lmx.R36.CHDIV_DISTB_EN=0; //关闭OUTB的输出分频器// lmx.R47.OUTB_POW=0; //OUTB的输出功率为最小值// lmx.R46.OUTB_PD=1; //关闭OUTB// save_lmx_all_reg(); //写入器件// //load_lmx_all_reg(); //重新加载所有寄存器// //get_PFD_fre(); } void load_lmx_all_reg(void) { uint8_t loop; uint16_t * p; lmx_wr(0,0x2318); //设置MUX为读出功能// spi_delay(50); p=(uint16_t *)(&lmx); for(loop=0;loop<65;loop++) { p[loop]=lmx_rd(loop); } load_reg_undefine_bit_default(); lmx.R0.MUXOUT_SEL=1; lmx_wr(0,lmx.R0.REG0); //设置MUX为锁定指示功能// } //将lmx值全部写入器件// void save_lmx_all_reg(void) { uint8_t loop; uint16_t * p; p=(uint16_t *)(&lmx); for(loop=1;loop<=64;loop++) { lmx_wr(loop,p[loop]); } // lmx_wr(1,p[1]); // for(loop=7;loop<=14;loop++) // { // lmx_wr(loop,p[loop]); // } // lmx_wr(19,p[19]); // lmx_wr(23,p[23]); // lmx_wr(24,p[24]); // for(loop=28;loop<=48;loop++) // { // lmx_wr(loop,p[loop]); // } // lmx_wr(64,p[64]); // uint8_t loop; // uint16_t * p; // p=(uint16_t *)(&lmx); // // lmx_wr(1,p[1]); // for(loop=9;loop<=14;loop++) // { // lmx_wr(loop,p[loop]); // } // //lmx_wr(19,p[19]); // //lmx_wr(23,p[23]); // //lmx_wr(24,p[24]); // lmx_wr(30,p[30]); // lmx_wr(31,p[31]); // for(loop=34;loop<=48;loop++) // { // lmx_wr(loop,p[loop]); // } // //lmx_wr(64,p[64]); } //计算pfd频率// float get_PFD_fre(void) { float K=1; if(lmx.R9.OSC_2X) { K=K*2; } if(lmx.R9.REF_EN==0) { K=0; } K=K*lmx.R10.MULT; if(lmx.R11.PLL_R) { K=K/(float)(lmx.R11.PLL_R); } if(lmx.R12.PLL_R_PRE) { K=K/(float)(lmx.R12.PLL_R_PRE); } plldat.pfd_fre=FOSC*K; return plldat.pfd_fre; } //计算pll当前输出频率// double get_PLL_fre(void) { //plldat.pll_fre=plldat.pfd_fre*plldat.PreN*( (double)(plldat.N) + ((double)(plldat.nume)/(double)(plldat.deno)) ); plldat.pll_fre=plldat.vcofre/plldat.chdiv_total; return plldat.pll_fre; } //化简分数,nume 分子, deno 分母// void simplify_fraction(uint16_t * nume,uint16_t* deno) { uint16_t m=*nume,n=*deno; uint16_t r=m%n; while(r!=0) { m=n; n=r; r=m%n; } if(n!=1) { *nume/=n; *deno/=n; } } //化简分数,nume 分子, deno 分母// void simplify_fraction32bit(uint32_t * nume,uint32_t* deno) { uint32_t m=*nume,n=*deno; uint32_t r=m%n; while(r!=0) { m=n; n=r; r=m%n; } if(n!=1) { *nume/=n; *deno/=n; } } //LMX器件很多寄存器的位没有给出具体定义,但是内部是有在使用,并且读回值与数据表给出的默认值不符// //所以,在将寄存器全部读回后,需将未定义位置为默认值,否则会导致器件出错// void load_reg_undefine_bit_default(void) { lmx.R0.NA00=1;lmx.R0.NA01=1;lmx.R0.NA02=0; lmx.R1.NA10=0X101; lmx.R7=0X28B2; lmx.R8=0X1000; lmx.R9.NA90=0X102;lmx.R9.NA91=0;lmx.R9.NA92=0; lmx.R10.NA100=0X58;lmx.R10.NA101=1; lmx.R11.NA110=0X8;lmx.R11.NA111=0; lmx.R12.NA120=0X7; lmx.R13.NA130=0X0;lmx.R13.NA131=0X0;lmx.R13.NA132=0X0; lmx.R14.NA140=0X0; lmx.R19=0X0965; lmx.R23=0X8842; lmx.R24=0X0509; lmx.R28=0X2924; lmx.R29=0X0084; lmx.R30.NA300=0X01A;lmx.R30.NA301=0X00; lmx.R31.NA310=0X01;lmx.R31.NA311=0X00;lmx.R31.NA312=0X00; lmx.R32=0X4210; lmx.R33=0X4210; lmx.R34.NA340=0X10;lmx.R34.NA341=0X30F; lmx.R35.NA350=0X1;lmx.R35.NA351=0X3;lmx.R35.NA352=0X0; lmx.R36.NA360=0X0;lmx.R36.NA361=0X0; lmx.R37.NA370=0X0;lmx.R37.NA371=0X2; lmx.R38.NA380=0X0;lmx.R38.NA381=0X0; lmx.R39.NA390=0X4;lmx.R39.NA391=0X2; // lmx.R46.NA460=0X2;lmx.R46.NA461=0X0; 数据手册上有误// lmx.R46.NA460=0X0;lmx.R46.NA461=0X0; lmx.R47.NA470=0X3;lmx.R47.NA471=0X0; lmx.R48.NA480=0XFF; lmx.R64.NA640=0XAF;lmx.R64.NA641=0X00; } //根据N值计算可用的 mash order 及 pfd dly值,优先选用了高阶值// void N_2_MASH_ORDER(uint16_t N) { if(N>=30) { mashorder[4].order_available=1; mashorder[3].order_available=1; mashorder[2].order_available=1; mashorder[1].order_available=1; mashorder[0].order_available=1; lmx.R39.PFD_DLY=mashorder[4].pfd_dly; lmx.R46.MASH_ORDER=mashorder[4].mash_order; } else if(N>=18) { mashorder[4].order_available=0; mashorder[3].order_available=1; mashorder[2].order_available=1; mashorder[1].order_available=1; mashorder[0].order_available=1; lmx.R39.PFD_DLY=mashorder[3].pfd_dly; lmx.R46.MASH_ORDER=mashorder[3].mash_order; } else if(N>=16) { mashorder[4].order_available=0; mashorder[3].order_available=0; mashorder[2].order_available=1; mashorder[1].order_available=1; mashorder[0].order_available=1; lmx.R39.PFD_DLY=mashorder[2].pfd_dly; lmx.R46.MASH_ORDER=mashorder[2].mash_order; } else if(N>=11) { mashorder[4].order_available=0; mashorder[3].order_available=0; mashorder[2].order_available=0; mashorder[1].order_available=1; mashorder[0].order_available=1; lmx.R39.PFD_DLY=mashorder[1].pfd_dly; lmx.R46.MASH_ORDER=mashorder[1].mash_order; } else if(N>=9) { mashorder[4].order_available=0; mashorder[3].order_available=0; mashorder[2].order_available=0; mashorder[1].order_available=0; mashorder[0].order_available=1; lmx.R39.PFD_DLY=mashorder[0].pfd_dly; lmx.R46.MASH_ORDER=mashorder[0].mash_order; } } uint8_t set_pll_fre(double fre) { if(fre<5) { return 0; } //lmx.R46.MASH_EN=1; if(fre<=3550) { lmx.R31.VCO_DISTA_PD=1; //3550频率以下使用分频器,故而关断vco->outa 之间的buf// lmx.R34.CHDIV_EN=1; //输出通道分频器总开关开启// lmx.R47.OUTA_MUX=0; //VCO经过分频器输出// lmx.R35.CHDIV_SEG1_EN=1; lmx.R35.CHDIV_SEG2_EN=1; lmx.R35.CHDIV_SEG3_EN=1; lmx.R30.VCO_2X_EN=0; //VCO输出倍频器关闭// if(fre<=30) //vco 3550-5760// { lmx.R35.CHDIV_SEG1=CHDIV1_3; //输出通道分频器选择// lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_8; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL123; //分频通道激活个数// plldat.chdiv_total=192; //lmx.R46.MASH_EN=0; } else if(fre<=50) //vco 3840-6400// { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_8; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL123; plldat.chdiv_total=128; } else if(fre<=70) //vco 4800-6720// { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_6; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL123; plldat.chdiv_total=96; } else if(fre<=100) //vco 4480-6400// { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_4; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL123; plldat.chdiv_total=64; } else if(fre<=110)//vco 4800-5280// { lmx.R35.CHDIV_SEG1=CHDIV1_3; lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_2; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL123; plldat.chdiv_total=48; } else if(fre<=150)//vco 3960-5400// { lmx.R35.CHDIV_SEG1=CHDIV1_3; lmx.R35.CHDIV_SEG2=CHDIV23_6; lmx.R36.CHDIV_SEG3=CHDIV23_2; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL123; plldat.chdiv_total=36; } else if(fre<=190)//vco 4800-6080// { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_2; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL123; plldat.chdiv_total=32; } else if(fre<=230)//vco 4560-5520/ { lmx.R35.CHDIV_SEG1=CHDIV1_3; lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL12; plldat.chdiv_total=24; } else if(fre<=300)//vco 3680-4800/ { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_8; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL12; plldat.chdiv_total=16; } else if(fre<=460)//vco 3600-5520/ { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_6; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL12; plldat.chdiv_total=12; } else if(fre<=610)//vco 3680-4880/ { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_4; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL12; plldat.chdiv_total=8; } else if(fre<=930)//vco 3660-5580// { lmx.R35.CHDIV_SEG1=CHDIV1_3; lmx.R35.CHDIV_SEG2=CHDIV23_2; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL12; plldat.chdiv_total=6; } else if(fre<=1240)//vco 3720-4960// { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_2; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL12; plldat.chdiv_total=4; } else if(fre<=1840)//vco 3720-5520// { lmx.R35.CHDIV_SEG1=CHDIV1_3; lmx.R35.CHDIV_SEG2=CHDIV23_1; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL1; plldat.chdiv_total=3; } else if(fre<=3550)//vco 3680-7100// { lmx.R35.CHDIV_SEG1=CHDIV1_2; lmx.R35.CHDIV_SEG2=CHDIV23_1; lmx.R36.CHDIV_SEG3=CHDIV23_1; lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL1; plldat.chdiv_total=2; } } else if(fre<=7100) { lmx.R31.VCO_DISTA_PD=0; //3550频率以上使用vco输出// lmx.R34.CHDIV_EN=0; //输出通道分频器总开关开启// lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL_PD; //vco输出分频器各阶段失能// lmx.R47.OUTA_MUX=1; //VCO不经过分频器,直接输出// lmx.R35.CHDIV_SEG1_EN=0; //vco输出分频器各阶段失能// lmx.R35.CHDIV_SEG2_EN=0; lmx.R35.CHDIV_SEG3_EN=0; lmx.R30.VCO_2X_EN=0; //VCO输出倍频器关闭// plldat.chdiv_total=1; } else if(fre<10000) { lmx.R31.VCO_DISTA_PD=0; //3550频率以上使用vco输出// lmx.R34.CHDIV_EN=0; //输出通道分频器总开关开启// lmx.R36.CHDIV_SEG_SEL=CHDIV_SEG_SEL_PD; //vco输出分频器各阶段失能// lmx.R47.OUTA_MUX=1; //VCO不经过分频器,直接输出// lmx.R35.CHDIV_SEG1_EN=0; //vco输出分频器各阶段失能// lmx.R35.CHDIV_SEG2_EN=0; lmx.R35.CHDIV_SEG3_EN=0; lmx.R30.VCO_2X_EN=1; //VCO输出倍频器开启// plldat.chdiv_total=0.5; } ////////////////////////////////////////////////////////////////////////////////// //设定PFD频率,OSC=100MHz,PFD默认200MHz// lmx.R9.OSC_2X=0; lmx.R12.PLL_R_PRE=1; lmx.R10.MULT=1; lmx.R11.PLL_R=1; plldat.pfd_fre=100; lmx.R13.PFD_CTL=0;//3; //PFD频率200MHz时,使用Single PFD 模式// ////////////////////////////////////////////////////////////////////////////////// double vcofre; vcofre=fre*plldat.chdiv_total; //计算要达到指定的频率,那么VCO应得到的频率// plldat.vcofre=vcofre; double n; uint16_t N; //需要计算的整数部分分频值,最小值为9// if(lmx.R30.VCO_2X_EN) //如果vco倍频器开启,PLL_N_PRE会强制成为4分频// { lmx.R37.PLL_N_PRE=1; //主动写入一次增加可靠性,(4分频)// plldat.PreN=4; n=2*vcofre/plldat.pfd_fre; if(n<36) { lmx.R9.OSC_2X=0; plldat.pfd_fre=100; n=2*vcofre/plldat.pfd_fre; lmx.R13.PFD_CTL=0; //PFD频率100MHz时,使用Dual PFD模式// } n=n/4; } else { n=vcofre/plldat.pfd_fre; if(n<18) { lmx.R9.OSC_2X=0; plldat.pfd_fre=100; n=vcofre/plldat.pfd_fre; lmx.R13.PFD_CTL=0; //PFD频率100MHz时,使用Dual PFD模式// } lmx.R37.PLL_N_PRE=0; //PLL_N_PRE(2分频)// plldat.PreN=2; n=n/2; } N=(uint16_t)(n); //取得整数部分// lmx.R38.PLL_N=N; plldat.N=N; N_2_MASH_ORDER(N); //根据N值计算可用的mash order及pfd dly// n=n-N; //得到小数部分// uint16_t nume,deno; if(n==0) { nume=0; deno=1; } else { //pll器件小数相关寄存器取16位(65535极值),因此按照60000比例放大在进行化简分数// nume=(uint16_t)round(n*60000); deno=60000; //分子分母一起放大60000倍// simplify_fraction(&nume,&deno); } lmx.R45.REG45=nume; lmx.R44.REG44=0; lmx.R41.REG41=deno; lmx.R40.REG40=0; plldat.nume=nume; plldat.deno=deno; //根据PFD频率修正R0因子// if(plldat.pfd_fre<=20) { lmx.R0.FCAL_HPFD_ADJ=0; if(plldat.pfd_fre<=5) { lmx.R0.FCAL_LPFD_ADJ=3; } else if(plldat.pfd_fre<=10) { lmx.R0.FCAL_LPFD_ADJ=2; } else if(plldat.pfd_fre<=20) { lmx.R0.FCAL_LPFD_ADJ=1; } else { lmx.R0.FCAL_LPFD_ADJ=0; } } else if(plldat.pfd_fre>=100) { lmx.R0.FCAL_LPFD_ADJ=0; if(plldat.pfd_fre>200) { lmx.R0.FCAL_HPFD_ADJ=3; } else if(plldat.pfd_fre>150) { lmx.R0.FCAL_HPFD_ADJ=2; } else if(plldat.pfd_fre>100) { lmx.R0.FCAL_HPFD_ADJ=1; } else { lmx.R0.FCAL_HPFD_ADJ=0; } } else { lmx.R0.FCAL_HPFD_ADJ=0; lmx.R0.FCAL_LPFD_ADJ=0; } if(FOSC<=200) { lmx.R1.CAL_CLK_DIV=0; } else if(FOSC<=400) { lmx.R1.CAL_CLK_DIV=1; } else if(FOSC<=800) { lmx.R1.CAL_CLK_DIV=2; } else { lmx.R1.CAL_CLK_DIV=3; } //lmx.R64.FCAL_FAST=1; //lmx.R64.ACAL_FAST=1; //lmx_wr(64,lmx.R64.REG64); save_lmx_all_reg(); //所有修改写入器件寄存器// lmx.R0.FCAL_EN=1; lmx_wr(0,lmx.R0.REG0); return 1; //lmx.R34.REG34=50160; //lmx_wr(34,lmx.R34.REG34); } 按照这个格式

最新推荐

recommend-type

基于单片机和LMX2485的微波信号源发生器的设计

在本设计中,为了实现8到14 GHz的频率覆盖,并保持较高的频率分辨率,我们固定了RF_R为1,RF_FD为4,000,000,通过调整RF_N和RF_FN的值来改变输出频率。这样的设计方法简化了分频器的复杂性,同时确保了微波信号源...
recommend-type

【大学生电子设计】:备战2015全国大学生电子设计竞赛-信号源类赛题分析.pdf

【大学生电子设计】:备战2015全国大学生电子设计竞赛-信号源类赛题分析.pdf
recommend-type

湘潭大学人工智能专业2024级大一C语言期末考试题库项目-包含58个从头歌平台抓取并排版的C语言编程题目及解答-涵盖基础语法-数组操作-条件判断-循环结构-函数调用-指针应用等核心.zip

2025电赛预测湘潭大学人工智能专业2024级大一C语言期末考试题库项目_包含58个从头歌平台抓取并排版的C语言编程题目及解答_涵盖基础语法_数组操作_条件判断_循环结构_函数调用_指针应用等核心.zip
recommend-type

基于STM32的步进电机S型曲线与SpTA算法高效控制及其实现 T梯形算法 经典版

基于STM32平台的步进电机S型曲线和SpTA加减速控制算法。首先阐述了S型曲线控制算法的特点及其在STM32平台上的实现方法,包括设置启动频率、加速时间和最高速度等参数,以减少电机启动和停止时的冲击。接着讨论了T梯形算法与S型曲线的结合,通过精确的时间控制提高运动精度。然后重点讲解了SpTA算法,强调其自适应性强、不依赖PWM定时器个数,能够根据实际运行状态动态调整。文中提到一种高效的非DMA数据传输方式,提升了CPU效率并解决了外部中断时无法获取已输出PWM波形个数的问题。最后介绍了SpTA算法在多路电机控制方面的优势。 适合人群:从事嵌入式系统开发、自动化控制领域的工程师和技术人员,尤其是对步进电机控制有研究兴趣的人群。 使用场景及目标:适用于需要高精度和平滑控制的步进电机应用场合,如工业机器人、数控机床等领域。目标是帮助开发者掌握STM32平台下步进电机的先进控制算法,优化系统的实时性能和多电机协同控制能力。 其他说明:文章提供了详细的理论背景和技术细节,有助于读者深入理解并应用于实际项目中。
recommend-type

Pansophica开源项目:智能Web搜索代理的探索

Pansophica开源项目是一个相对较新且具有创新性的智能Web搜索代理,它突破了传统搜索引擎的界限,提供了一种全新的交互方式。首先,我们来探讨“智能Web搜索代理”这一概念。智能Web搜索代理是一个软件程序或服务,它可以根据用户的查询自动执行Web搜索,并尝试根据用户的兴趣、历史搜索记录或其他输入来提供个性化的搜索结果。 Pansophica所代表的不仅仅是搜索结果的展示,它还强调了一个交互式的体验,在动态和交互式虚拟现实中呈现搜索结果。这种呈现方式与现有的搜索体验有着根本的不同。目前的搜索引擎,如Google、Bing和Baidu等,多以静态文本和链接列表的形式展示结果。而Pansophica通过提供一个虚拟现实环境,使得搜索者可以“扭转”视角,进行“飞行”探索,以及“弹网”来浏览不同的内容。这种多维度的交互方式使得信息的浏览变得更加快速和直观,有望改变用户与网络信息互动的方式。 接着,我们关注Pansophica的“开源”属性。所谓开源,指的是软件的源代码可以被公众获取,任何个人或组织都可以自由地使用、学习、修改和分发这些代码。开源软件通常由社区进行开发和维护,这样的模式鼓励了协作创新并减少了重复性劳动,因为全世界的开发者都可以贡献自己的力量。Pansophica项目作为开源软件,意味着其他开发者可以访问和使用其源代码,进一步改进和扩展其功能,甚至可以为Pansophica构建新的应用或服务。 最后,文件名称“Pansophica-src-1.3”表明了我们讨论的特定版本的Pansophica开源代码。数字“1.3”很可能指的是该版本号,表明这是Pansophica项目的第1.3个公开版本。这个版本号对于开发者来说很重要,因为它可以帮助他们追踪更新的进度、比较版本间的差异以及选择最适合其项目的版本。 综合以上信息,Pansophica开源项目不仅在搜索代理领域引入了创新的交互方式,而且通过开源的方式,提供了技术共享和协作的可能性。对于IT行业来说,开源项目是推动技术发展的重要力量,它激发了社区的活力,促进了知识的传播和技术的进步。通过构建一个开源社区,Pansophica可以吸引来自世界各地的开发者和研究人员,共同探索如何将搜索技术与交互式虚拟现实技术结合起来,为用户带来更加丰富和有效的信息检索体验。同时,Pansophica的开源性质也使其更容易适应未来技术的发展,随着社区的不断贡献和反馈,这一平台有望在功能和性能上得到持续的优化和增强。
recommend-type

跨平台内容提取无忧:coze工作流应对社交媒体挑战

# 1. 社交媒体内容提取的必要性与挑战 ## 1.1 内容提取的必要性 在数字时代,社交媒体内容是信息与数据流动的主干道,公司、个人和研究者都在寻求从这些信息中提取价值。无论是为了市场趋势分析、品牌监控、消费者洞察还是公共舆论监测,有效的社交媒体内容提取变得至关重要。这不仅有助于企业做出数据驱动的决策,也能使个人更好地理
recommend-type

vrrp主设备发送的免费arp

<think>好的,我现在需要回答用户关于VRRP主设备发送免费ARP的目的和工作原理的问题。首先,我得回忆一下VRRP的基本概念和工作机制。VRRP,虚拟路由冗余协议,主要用于在局域网中提供默认网关的冗余备份,确保网络的高可用性。主设备(Master)负责转发流量,而备用设备(Backup)则在主设备故障时接管工作。 用户的问题集中在主设备发送免费ARP的目的和机制上。根据引用[2],免费ARP用于通知下游设备虚拟MAC地址的变更。当主设备被选举出来后,它需要让局域网内的其他设备知道虚拟IP对应的MAC地址已经指向自己,这样流量才会被正确路由到主设备。免费ARP的作用应该就是更新这些设备的
recommend-type

为Ghost博客平台打造的Meteor流星包装使用指南

从给定文件信息中,我们可以提炼出以下IT知识点: ### 标题知识点:流星Ghost软件包 1. **流星Ghost软件包的用途**:流星Ghost软件包是专为Ghost博客平台设计的流星(Meteor)应用程序。流星是一个开源的全栈JavaScript平台,用于开发高性能和易于编写的Web应用程序。Ghost是一个开源博客平台,它提供了一个简单且专业的写作环境。 2. **软件包的作用**:流星Ghost软件包允许用户在流星平台上轻松集成Ghost博客。这样做的好处是可以利用流星的实时特性以及易于开发和部署的应用程序框架,同时还能享受到Ghost博客系统的便利和美观。 ### 描述知识点:流星Ghost软件包的使用方法 1. **软件包安装方式**:用户可以通过流星的命令行工具添加名为`mrt:ghost`的软件包。`mrt`是流星的一个命令行工具,用于添加、管理以及配置软件包。 2. **初始化Ghost服务器**:描述中提供了如何在服务器启动时运行Ghost的基本代码示例。这段代码使用了JavaScript的Promise异步操作,`ghost().then(function (ghostServer) {...})`这行代码表示当Ghost服务器初始化完成后,会在Promise的回调函数中提供一个Ghost服务器实例。 3. **配置Ghost博客**:在`then`方法中,首先会获取到Ghost服务器的配置对象`config`,用户可以在此处进行自定义设置,例如修改主题、配置等。 4. **启动Ghost服务器**:在配置完成之后,通过调用`ghostServer.start()`来启动Ghost服务,使其能够处理博客相关的请求。 5. **Web浏览器导航**:一旦流星服务器启动并运行,用户便可以通过Web浏览器访问Ghost博客平台。 ### 标签知识点:JavaScript 1. **JavaScript作为流星Ghost软件包的开发语言**:标签指出流星Ghost软件包是使用JavaScript语言开发的。JavaScript是一种在浏览器端广泛使用的脚本语言,它也是流星平台的基础编程语言。 2. **流星和Ghost共同使用的语言**:JavaScript同样也是Ghost博客平台的开发语言。这表明流星Ghost软件包可以无缝集成,因为底层技术栈相同。 ### 压缩包子文件的文件名称列表知识点:meteor-ghost-master 1. **版本控制和软件包结构**:文件名称`meteor-ghost-master`暗示了该软件包可能托管在像GitHub这样的版本控制系统上。文件名中的`master`通常指的是主分支或主版本。 2. **软件包的目录结构**:通过文件名称可以推断出该软件包可能拥有一个标准的流星软件包结构,包含了初始化、配置、运行等必要的模块和文件。 3. **软件包的维护状态**:由于文件名没有包含特定的版本号,我们无法直接得知软件包的最新更新情况。通常,软件包维护者会将最新的版本代码放在`master`分支上。 ### 总结 流星Ghost软件包提供了一个有效的解决方案,使得流星平台的开发者能够在他们的应用中添加Ghost博客功能。软件包的使用简便,通过流星的命令行工具安装,并通过JavaScript代码配置和启动Ghost服务。通过流星Ghost软件包,开发者能够享受流星的实时特性以及Ghost博客系统的便利性。此外,软件包的命名和结构也暗示了其维护和版本控制的模式,有助于开发者更好地理解如何使用和维护这一软件包。
recommend-type

抖音标题生成自动化:用coze工作流释放创意

# 1. 抖音标题生成自动化的重要性 随着社交媒体平台的崛起,内容的吸引力很大程度上取决于标题的创意与精准性。抖音作为一个日活亿级的短视频平台,高质量的标题能够有效提高视频的点击率,增加内容的传播。但是,人工撰写标题不仅耗时耗力,而且很难做到快速响应热点,自动化标题生成工具应运而生。coze工作流,作为一种实现自动化生成抖音标题的工具,其重要性不言而喻。它能够利用大数据分析和机器学习技术,提高标题的吸引
recommend-type

spss消费结构因子分析

<think>好的,我现在需要帮助用户在SPSS中进行消费结构的因子分析。首先,我要回忆一下因子分析的基本步骤和SPSS的操作流程。用户可能对SPSS不太熟悉,所以步骤要详细,同时需要结合他们提供的引用内容,特别是引用[2]中的适用条件和检验方法。 首先,用户提到了消费结构的数据,这可能包括多个变量,如食品、住房、交通等支出。因子分析适用于这种情况,可以降维并找出潜在因子。根据引用[2],需要检查样本量是否足够,变量间是否有相关性,以及KMO和Bartlett检验的结果。 接下来,我需要按照步骤组织回答:数据准备、适用性检验、因子提取、因子旋转、命名解释、计算得分。每个步骤都要简明扼要,说