-
这个要顶!
-
龙芯?这要看看!
-
506里面没有ADC/LCD. SPI模块是我自己在弄。 上次说的enc28j60 在RT-THread中是基于STM32的,和STM32紧耦合。
-
RDR与TDR是两个寄存器,但实际是共用一个地址。
当读操作时,是读的RDR,
当写操作时,是写的TDR。
当你写过TDR后,想去读一下TDR,而实现上是读的RDR的值。
RDR的值可能是读保持也可能是清清除,所以你看的是什么值是不确定的。
这就是仿真时为什么总出溢出错误的原因了。
-
RT-Thread的老大也在坛子里。
-
看看下面的帖子:
https://bbs.eeworld.com.cn/thread-330952-1-1.html
-
官方板的型号:富士通Cortex-M3 Easy Kit开发板
Peripheral Manual中有关ORE的描述很简单,没有说明它是怎么产生的。
-
前面单步调试时发现数据溢出。即下面的代码中没有执行读取RDR中数据。现在分析看并不是由于没有SCK造成的。
if ((reg_ssr & (SSR_RDRF)) != 0)
{
/* Return the data in the DR register */
reg_data = FM3_MFS0_CSIO->RDR;
}
else
{
/* overrun error */
/* clear rx error interrupt */
reg_ssr |= SSR_REC;
FM3_MFS0_CSIO->SSR = reg_ssr;
reg_data = -1;
}
而是在写数据时造成了数据溢出。从下面调试的截图中也可以看出。但是关于数据溢出的原因FUJISHU的资料里没有提及。估计问题就在这里了。
[ 本帖最后由 yang.aiquan 于 2012-7-25 22:06 编辑 ]
-
完善相关代码后,读写ENC28J60寄存器EIE时的逻辑分析仪的图形
向EIE寄存器中写入0XAA,然后读出EIE寄存器的值。最后向SPI总线上发0X55.
EIE寄存器的地址是0X1B,写入时地址和0X4F相与,所以首先写入的值为0X5B,然后是要写入寄存器的值0XAA。
读出时,先写入寄存器的地址0X1B,然后是接收函数中读RDR寄存器之前写入的0X00,然后是发送了一个0X00,最后向SPI总线上发0X55.
RDR寄存器中的数据应该是在第一次写0X00时总线上的数据被移到RDR寄存器中的。但是在图中看不到它是0XAA.
-
测试调用代码为:
while(1)
{
SPI_SendData(serial_spi, 0xaf);
SPI_SendData(serial_spi, 0xa5);
SPI_SendData(serial_spi, 0x0a);
}
接收程序中没有增加发送0x00时的代码(如下)时的逻辑分析仪截图
/* Write in the DR register the data to be sent */
FM3_MFS0_CSIO->TDR = 0x00;
/* wait until tx is completed */
while(1)
{
reg_ssr = FM3_MFS0_CSIO->SSR;
if (((reg_ssr & (SSR_TDRE)) != 0) && ((reg_ssr & (SSR_TBI)) != 0))
{
break;
}
}
-
发送程序修改如下,增加发送0X00,此时SCK正常,但发送仍然单步调试时发现数据溢出。即代码中没有执行读取RDR中数据。
uint16_t SPI_ReceiveData(struct rt_serial_device *serial)
{
uint8_t reg_smr;
uint8_t reg_scr;
uint8_t reg_ssr;
uint16_t reg_data;
int t=0;
ENC28J60_CS_LOW();
for(t=0;tSCR | (SCR_RIE | SCR_RXE);
/* tx interrupt enalbe */
reg_scr = reg_scr | SCR_TXE | SCR_TIE;
FM3_MFS0_CSIO->SCR = reg_scr;
/* Write in the DR register the data to be sent */
FM3_MFS0_CSIO->TDR = 0x00;
/* wait until tx is completed */
while(1)
{
reg_ssr = FM3_MFS0_CSIO->SSR;
if (((reg_ssr & (SSR_TDRE)) != 0) && ((reg_ssr & (SSR_TBI)) != 0))
{
break;
}
}
reg_ssr = FM3_MFS0_CSIO->SSR;
if ((reg_ssr & (SSR_RDRF)) != 0)
{
/* Return the data in the DR register */
reg_data = FM3_MFS0_CSIO->RDR;
}
else
{
/* overrun error */
/* clear rx error interrupt */
reg_ssr |= SSR_REC;
FM3_MFS0_CSIO->SSR = reg_ssr;
reg_data = -1;
}
/* rx interrupt disable, rx disable */
reg_scr = FM3_MFS0_CSIO->SCR & ~(SCR_RIE | SCR_RXE);
/* tx interrupt disable */
reg_scr = reg_scr & ~(SCR_TIE) & ~(SCR_TXE);
FM3_MFS0_CSIO->SCR = reg_scr;
for(t=0;t
-
上面所谈仅是将MFS的引脚引到外部封装的某个引脚上。功能的配置,比如到底是UART?SPI?I2C?还需要设置相应的寄存器。最后,别忘了相关中断使能、功能使能。详细的内容,等我忙完SPI接口的ENC28C60网络模块,空闲下来再详细解说。
-
大家没遇到这个问题吗?
-
完成《RT-Thread在富士通Cortex M3 Easy Kit开发板上的移植(一)》后,大家全速运行的时候会发现 显示有些不正常,是移植得的有问题吗?
有问题就看一下:
RT-Thread在富士通Cortex M3 Easy Kit开发板上的移植(二)
(由于加链接要审核,大家就自己找一下吧)
-
猫猫,你的32K晶体外壳没接地。
-
其实UCOS我早跑过了。不过不建议大家用,所以没发帖子说。
如果是不同的IAR EWARM版本,则还需要按照我的帖子里所描述的,把IAR EWARM安装目录下的几个文件拷贝到项目目录下。
另外还是建议使用RT-Thread操作系统,一则免费,二则国产,性能也不错!
[ 本帖最后由 yang.aiquan 于 2012-6-15 15:23 编辑 ]
-
6.30
-
去看看我的《RT-Thread在富士通Cortex M3 Easy Kit开发板上的移植》帖子吧。项目的器件要配置对。
-
不同部分相同功能电路需要统一的问题。几个部分用到的相同电路,目前不太一致。比如:LED电路、按键电路、复位电路、电源电路等。
首先是电源电路,我们的电源输有外接电源和电池,所以建议用单刀三掷开关,一接外接电源,中间一接2K电阻到地,一接电池。需要强调的是通过2K电阻到地的开关分路一定要在中间。即从外接电源切换到电池时,一定经过到地的过程。
电源变换可以用三端稳压器1117从9V变5V,再从5V变3.3V。如果担心继电器或电机干扰,其实电路上和PCB布局布线处理好了完全可以解决这个问题。我们可以先用洞洞板搭个电路看看。继电器或电机是感性负载,我们需要加二极管钳位电路。
其次、LED电路最好是VCC--3.3K电阻--MCU输出引脚。
第三、复位电路:MSP430 典型的复位电路有一下3种:
(1) 在RST/NMI管脚上接100K欧的上拉电阻。
(2)在(1)的基础上再接0.1uf的电容,电容的一端接地,可以使复位更加可靠。
(3)在(2)的基础上,再在电阻上并接一个型号为IN4008的二极管,可以可靠的实现系统断电后立即上电。
我们最好用第三种。
[ 本帖最后由 yang.aiquan 于 2012-6-7 22:47 编辑 ]
-
之前我试过,原厂的DEMO程序是正常的。有可能是LCD的排线插座的问题。我的有些松动,有时会乱码,有时会翻转显示。