您的位置 首页 产品

怎么处理单片机中的bug形式问题

如何解决单片机中的bug模式问题-CSN(IF0)、SCLK(SCL)、RSTN、MOSI(SDA)、MISO(IF1)、AC0(GPIO0)、AC1(GPIO1)(这些管脚中的RSTN、AC0、AC1由FPGA控制),括号内是管脚的第二功能,主要用于芯片复位时的模式设置,具体到SPI模式:在RSTN的上升沿,IF1、IF0要置1,AC0、AC1置0。

运用单片机操控ZL30151输出时钟,引脚衔接联系如下:

怎么处理单片机中的bug

其间A1、A0是作为复用器的地址线信号,ZL30151 SPI形式下的有用管脚如下:

CSN(IF0)、SCLK(SCL)、RSTN、MOSI(SDA)、MISO(IF1)、AC0(GPIO0)、AC1(GPIO1)(这些管脚中的RSTN、AC0、AC1由FPGA操控),括号内是管脚的第二功用,首要用于芯片复位时的形式设置,详细到SPI形式:在RSTN的上升沿,IF1、IF0要置1,AC0、AC1置0。别的RSTN在上电之后要有一个复位的进程,需求拉低至少100ns。而RSTN是在FPGA端操控的,所以需求单片机和FPGA一起操控,办法是单片机项FPGA的寄存器写一个值,然后FPGA就将对应的管脚拉低或置1。SPI形式设置就要在单片机给FPGA发送赋值恳求前,将IF1、IF0管脚的值准备好。问题便是在这儿呈现的。
 

程序经过编译,下到单片机,可是ZL30151的时钟没有出来,然后进入debug形式找问题。

int main()

{

init_devices();

init_pll();

PLL3_init();

unsigned char f_read = FPGA_read(0x3b00);

……

return 0;

}

首要置疑和FPGA的接口有问题,读寄存器的值,看是否写入进去,可是显现一直是0,然后打断点调试:

unsigned char f_read = FPGA_read(0x3b00);在这一句打断点,成果程序底子没跑到这儿,然后将断点往上打,

PLL3_init();程序运转到断点这儿,再点向下运转,程序就跑飞了,问题出在PLL3_init();然后在PLL3_init()函数里打断点,

DDRD = 0x3f;

//X,X,SEL_A1,SEL_A0,MISO(IF1),MOSI(SDA),SCLK(SCL),CSN(IF0)

PORTD = 0x19;在这儿程序居然跑飞了。

这儿仅仅一个简略的给管脚赋值的句子,实在是看不出有什么问题,何况在init_devices();这个函数里边也有给管脚赋值的句子,并没有问题。百思不得其解,讨教单位的大牛王总,过来之后冷眼一扫,看到Port0、1、2、3复用了中止功用,并且在init_devices();里边是使能了INT0和INT1的,就判别应该是中止引起的。然后刚好我在给PORT管脚赋值的时分将INT0置为高了,所以程序就进入了中止程序,可是本项目工程里并没有写INT0的中止函数(没有中止函数还把中止使能翻开,这便是不动脑筋复制粘贴的结果),所以程序就跑飞了。

**关于单片机的中止引脚,手册里是这样规则的:只需使能了中止,即便引脚INT7:0装备为输出,只需电平发生了适宜的改变,中止也会触发。

所以尽管将引脚装备为输出引脚,也依然引发了中止。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/xinpin/chanpin/346471.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部