搜索
bottom↓
回复: 20

ASM9260T uCOSII+ emwin开发包 ,基于IAR平台【供大家学习参考】

[复制链接]

出0入0汤圆

发表于 2017-2-7 17:57:26 | 显示全部楼层 |阅读模式
本帖最后由 Auir 于 2017-2-7 17:59 编辑

这个版本是基于armstrong的第一版本的基础上做了一些驱动方面的添加。
armstrong首先发布了第一版支持uCOSII及emwin,非常感谢。

第一版里少了一些驱动,比如以太网,usb之类的。 这一版本把驱动补齐了。
如有问题,欢迎交流, 由于ucosii有版权的需求,我私人更改以后放在这里,仅供大家学习参考。如需uCOSII的商业版本,可以联系uCOSII的代理商购买。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入90汤圆

发表于 2017-2-7 18:13:46 | 显示全部楼层
这么高端的芯片还能跑这个啊!挺不错的。支持一下。感觉就是当单片机用了。
不过这样用的话,网络方面的操作估计不太方便了吧

出0入0汤圆

发表于 2017-2-7 20:11:10 | 显示全部楼层
有keil mdk  平台的就还呀

出0入0汤圆

发表于 2017-2-7 20:15:41 来自手机 | 显示全部楼层
谢谢!正捉摸用来!

出0入0汤圆

发表于 2017-2-7 20:17:42 | 显示全部楼层
收藏备用,谢谢楼主分享

出870入263汤圆

发表于 2017-2-11 19:58:14 | 显示全部楼层
honami520 发表于 2017-2-7 18:13
这么高端的芯片还能跑这个啊!挺不错的。支持一下。感觉就是当单片机用了。
不过这样用的话,网络方面的操 ...

由于内存资源比一般单片机多得多,做网络应用还是蛮便利的。通常,移植一个lwip,结合RTOS就可以用socket接口了。
很多人在小内存单片机上移植lwip出现稳定性不佳的问题,多数都是内存不足导致的;内存对于lwip太重要了。
我这里也重写了asm9260t的eth驱动,跟官方示例是完全不同的用法;目前是为uip定制的,可以拿去需要的人参考:

uip线程的用法参考如下:
  1. #include "usrinc.h"
  2. #include "uip_arp.h"
  3. #include "timer.h"
  4. #include "emac.h"
  5. #include <string.h>
  6. #include <stdlib.h>

  7. extern void *uip_sappdata;
  8. extern void tftpd_init(void);
  9. extern void tftpd_appcall(struct uip_udp_conn *conn);

  10. ////////////////////////////////////////////////////////////////////////////////
  11. static volatile bool_t isLinkUp = 0;
  12. static struct timer arp_timer;
  13. static struct timer peri_timer;
  14. static struct uip_udp_conn _udp_conn;

  15. ////////////////////////////////////////////////////////////////////////////////
  16. #define ETHBUF              ((struct uip_eth_hdr *)&uip_buf[0])
  17. #define UDPBUF              ((struct uip_udpip_hdr *)&uip_buf[UIP_LLH_LEN])

  18. #define UIP_PERIOD_TIMER    (CLOCK_SECOND/10)   // uip服务周期。
  19. #define UIP_ARP_TIMER       (10*CLOCK_SECOND)   // arp时基周期。

  20. ////////////////////////////////////////////////////////////////////////////////
  21. //|          |
  22. //| 函数名称 |: uip_services_start
  23. //| 功能描述 |:
  24. //|          |:
  25. //| 参数列表 |:
  26. //|          |:
  27. //| 返    回 |:
  28. //|          |:
  29. //| 备注信息 |:
  30. //|          |:
  31. ////////////////////////////////////////////////////////////////////////////////
  32. void uip_services_start(void)
  33. {
  34.   struct uip_udp_conn *pconn;
  35.   pconn = uip_udp_new(NULL, 0);
  36.   if(pconn){
  37.     uip_udp_bind(pconn, HTONS(100));
  38.   }else{
  39.     DBG_PUTS("\nUDP:100 bind failed.");
  40.     sys_suspend();
  41.   }
  42. }

  43. ////////////////////////////////////////////////////////////////////////////////
  44. //|          |
  45. //| 函数名称 |: task_uip
  46. //| 功能描述 |:
  47. //|          |:
  48. //| 参数列表 |:
  49. //|          |:
  50. //| 返    回 |:
  51. //|          |:
  52. //| 备注信息 |:
  53. //|          |:
  54. ////////////////////////////////////////////////////////////////////////////////
  55. OS_STK task_uip_stk[TASK_UIP_STK] @ ".noinit";
  56. void task_uip(void *p_arg)
  57. {
  58.   u32_t ipaddr;
  59.   int i;
  60.   
  61.   // 初始化uip时钟模块。
  62.   clock_init();
  63.   // ARP模块初始化。
  64.   uip_arp_init();
  65.   // 初始化uip协议栈。
  66.   uip_init();
  67.   
  68.   // 协议栈地址配置。
  69.   ipaddr = util_rev32(MAKEIP(192,168,1,56));
  70.   uip_sethostaddr(&ipaddr);
  71.   ipaddr = util_rev32(MAKEIP(192,168,1,1));
  72.   uip_setdraddr(&ipaddr);
  73.   ipaddr = util_rev32(MAKEIP(255,255,255,0));
  74.   uip_setnetmask(&ipaddr);
  75.   memcpy(uip_ethaddr.addr, "087653", 6);
  76.   
  77.   // 初始化以太网模块硬件。
  78.   if(!emac_init(uip_ethaddr.addr)){
  79.     DBG_PUTS("\nemac init failed.");
  80.     sys_suspend();
  81.   }
  82.   
  83.   // 启动uip的上层应用服务。
  84.   uip_services_start();
  85.   
  86.   // 初始化uip定时器。
  87.   timer_set(&arp_timer, UIP_ARP_TIMER);
  88.   timer_set(&peri_timer, UIP_PERIOD_TIMER);
  89.   
  90.   DBG_PUTS("\nenet start.");
  91.   
  92.   // 开始协议栈消息循环。
  93.   while(1){
  94.     // 等待以太网模块产生中断。
  95.     if(emac_wait_signal(20)){
  96.       // 同步MAC与PHY之间的传输模式。
  97.       isLinkUp = emac_sync_transfer_mode();
  98.       // 有中断发生,则处理可能的中断事务:
  99.       while(1){
  100.         // 循环接收所有数据帧。
  101.         uip_len = emac_read_packet(uip_buf, UIP_BUFSIZE);
  102.         if(uip_len == 0){
  103.           // 接收缓冲区没有数据包了。
  104.           break;
  105.         }
  106.         if(HTONS(UIP_ETHTYPE_IP) == ETHBUF->type){
  107.           uip_arp_ipin();
  108.           uip_input();
  109.           if(isLinkUp && (uip_len > 0)){
  110.             uip_arp_out();
  111.             emac_write_packet(uip_buf, uip_len);
  112.           }
  113.           uip_len = 0;
  114.         }else if(HTONS(UIP_ETHTYPE_ARP) == ETHBUF->type){
  115.           uip_arp_arpin();
  116.           if(isLinkUp && (uip_len > 0)){
  117.             emac_write_packet(uip_buf, uip_len);
  118.           }
  119.           uip_len = 0;
  120.         }
  121.       }
  122.     }else{
  123.       // 同步MAC与PHY之间的传输模式。
  124.       isLinkUp = emac_sync_transfer_mode();
  125.     }
  126.    
  127.     // 处理uip的定时服务。
  128.     if(timer_expired(&peri_timer)){
  129.       timer_reset(&peri_timer);
  130. #if UIP_CONF_TCP
  131.       for(i = 0; i < UIP_CONNS; i++){
  132.         uip_periodic(i);
  133.         if(isLinkUp && (uip_len > 0)){
  134.           uip_arp_out();
  135.           emac_write_packet(uip_buf, uip_len);
  136.         }
  137.         uip_len = 0;
  138.       }
  139. #endif /* UIP_CONF_TCP */
  140. #if UIP_CONF_UDP
  141.       for(i = 0; i < UIP_UDP_CONNS; i++){
  142.         uip_udp_periodic(i);
  143.         if(isLinkUp && (uip_len > 0)){
  144.           uip_arp_out();
  145.           emac_write_packet(uip_buf, uip_len);
  146.         }
  147.         uip_len = 0;
  148.       }
  149. #endif /* UIP_CONF_UDP */
  150.     }
  151.     // 对ARP表进行超时处理。
  152.     if(timer_expired(&arp_timer)){
  153.       timer_reset(&arp_timer);
  154.       uip_arp_timer();
  155.     }
  156.   }
  157. }

  158. ////////////////////////////////////////////////////////////////////////////////
  159. //|          |
  160. //| 函数名称 |: udp_appcall
  161. //| 功能描述 |: UDP应用程序服务。
  162. //|          |:
  163. //| 参数列表 |:
  164. //|          |:
  165. //| 返    回 |:
  166. //|          |:
  167. //| 备注信息 |:
  168. //|          |:
  169. ////////////////////////////////////////////////////////////////////////////////
  170. void udp_appcall(void)
  171. {
  172.   switch(uip_udp_conn->lport){
  173.   case HTONS(69):
  174.     //tftpd_appcall(uip_udp_conn);
  175.     break;
  176.   case HTONS(100):
  177.     if(uip_newdata()){
  178.       uip_ipaddr_copy(_udp_conn.ripaddr, UDPBUF->srcipaddr);
  179.       _udp_conn.rport = UDPBUF->srcport;
  180.       _udp_conn.lport = uip_udp_conn->lport;
  181.       _udp_conn.ttl = uip_udp_conn->ttl;
  182.       uip_udp_conn = &_udp_conn;
  183.       uip_udp_send(uip_datalen());
  184.     }
  185.     break;
  186.   }
  187. }

  188. ////////////////////////////////////////////////////////////////////////////////
  189. //|          |
  190. //| 函数名称 |: tcp_appcall
  191. //| 功能描述 |: TCP应用程序服务。
  192. //|          |:
  193. //| 参数列表 |:
  194. //|          |:
  195. //| 返    回 |:
  196. //|          |:
  197. //| 备注信息 |:
  198. //|          |:
  199. ////////////////////////////////////////////////////////////////////////////////
  200. void tcp_appcall(void)
  201. {
  202.   switch(uip_conn->lport){
  203.   default:
  204.     uip_abort();
  205.     break;
  206.   }
  207. }

复制代码

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-2-12 07:49:07 来自手机 | 显示全部楼层
移植freertos,没版权,现在代码都从ucosiii转freertos

出0入0汤圆

发表于 2017-2-20 12:51:42 | 显示全部楼层
在开发板上测试了一下,发现代码有问题?ucos的启动任务(App_TaskStart)都进不了,看起来在不断的重启.软件模拟倒是能进入App_TaskStart.各位大侠,求解.

出0入0汤圆

发表于 2017-2-20 13:47:16 | 显示全部楼层
芯片淘宝可以购买?

出0入0汤圆

发表于 2017-2-20 14:33:01 | 显示全部楼层
这个片子推的咋样了?几年前就听说这个了但是一直没听说在集中器行业里面有用到的】

出0入0汤圆

 楼主| 发表于 2017-2-21 22:49:45 | 显示全部楼层
sanger 发表于 2017-2-20 13:47
芯片淘宝可以购买?

淘宝可以购买。

出0入0汤圆

 楼主| 发表于 2017-2-21 22:53:30 | 显示全部楼层
suhob909081 发表于 2017-2-20 12:51
在开发板上测试了一下,发现代码有问题?ucos的启动任务(App_TaskStart)都进不了,看起来在不断的重启.软件模 ...

我调试的时候是下载到sdram里运行的,您可以先试试下载到sdram里运行。
下次我 下载到nand试试。

出0入0汤圆

发表于 2017-2-22 00:01:49 | 显示全部楼层
mark一下

出0入0汤圆

发表于 2017-2-22 00:25:00 | 显示全部楼层
本帖最后由 suhob909081 于 2017-2-22 00:30 编辑
Auir 发表于 2017-2-21 22:53
我调试的时候是下载到sdram里运行的,您可以先试试下载到sdram里运行。
下次我 下载到nand试试。 ...


谢谢你的回复!我是用jlink下载测试的.程序运行到下面:
OSStartHighRdy
                                                                ; Change to SVC mode.
    MSR     CPSR_c, #(OS_CPU_ARM_CONTROL_INT_DIS | OS_CPU_ARM_MODE_SVC)

    LDR     R0, =OSTaskSwHook                                   ; OSTaskSwHook();
    MOV     LR, PC
    BX      R0

    LDR     R0, =OSRunning                                      ; OSRunning = TRUE;
    MOV     R1, #1
    STRB    R1, [R0]

                                                                ; SWITCH TO HIGHEST PRIORITY TASK:
    LDR     R0, =OSTCBHighRdy                                   ;    Get highest priority task TCB address,
    LDR     R0, [R0]                                            ;    Get stack pointer,
    LDR     SP, [R0]                                            ;    Switch to the new stack,

这儿iar出现  Wed Feb 22, 2017 00:17:50: The stack pointer for stack 'SVC_STACK' (currently 0x207624F0) is outside the stack range  

    LDR     R0, [SP], #4                                        ;    Pop new task's CPSR,
    MSR     SPSR_cxsf, R0

    LDMFD   SP!, {R0-R12, LR, PC}^                              ;    Pop new task's context.

您的iar工程编译时使用的icf文件是指向你电脑的另外一个文件夹中,并没有包含在rar中,第一编译出错,我就使用了文件包里的 EvalBoards\Alpscale\ASM9260\IAR\BSP\asm9260_SDRAM.icf 文件.是不是这个icf不对造成运行错误呢?

该icf内容为:
/*###ICF### Section handled by ICF editor, don't touch! ****/
/*-Editor annotation file-*/
/* IcfEditorFile="$PROJ_DIR$\..\BSP\a_v1_0.xml" */
/*-Specials-*/
define symbol __ICFEDIT_intvec_start__ = 0x20008000;
/*-Memory Regions-*/
define symbol __ICFEDIT_region_ROM_start__ = 0x20008040;
define symbol __ICFEDIT_region_ROM_end__   = 0x201fffff;
define symbol __ICFEDIT_region_RAM_start__ = 0x20200000;
define symbol __ICFEDIT_region_RAM_end__   = 0x21ffffff;
/*-Sizes-*/
define symbol __ICFEDIT_size_cstack__   = 0x4000;
define symbol __ICFEDIT_size_svcstack__ = 0x8000;
define symbol __ICFEDIT_size_irqstack__ = 0x160;
define symbol __ICFEDIT_size_fiqstack__ = 0x40;
define symbol __ICFEDIT_size_undstack__ = 0x40;
define symbol __ICFEDIT_size_abtstack__ = 0x40;
define symbol __ICFEDIT_size_heap__     = 0x100000;
/**** End of ICF editor section. ###ICF###*/


define memory mem with size = 4G;
define region ROM_region        = mem:[from __ICFEDIT_region_ROM_start__   to __ICFEDIT_region_ROM_end__];
define region RAM_region        = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__];

define block CSTACK    with alignment = 8, size = __ICFEDIT_size_cstack__   { };
define block SVC_STACK with alignment = 8, size = __ICFEDIT_size_svcstack__ { };
define block IRQ_STACK with alignment = 8, size = __ICFEDIT_size_irqstack__ { };
define block FIQ_STACK with alignment = 8, size = __ICFEDIT_size_fiqstack__ { };
define block UND_STACK with alignment = 8, size = __ICFEDIT_size_undstack__ { };
define block ABT_STACK with alignment = 8, size = __ICFEDIT_size_abtstack__ { };
define block HEAP      with alignment = 8, size = __ICFEDIT_size_heap__     { };

initialize by copy { readwrite };
do not initialize  { section .noinit };

place at address mem:__ICFEDIT_intvec_start__    { readonly section .intvec };


place in ROM_region   { readonly };
place in RAM_region   { readwrite,
                        block CSTACK, block SVC_STACK, block IRQ_STACK, block FIQ_STACK,
                        block UND_STACK, block ABT_STACK, block HEAP };

define exported symbol fl_ram_end = (__ICFEDIT_region_RAM_end__ & 0xFFFFFFF8);

这儿,我已经将  define symbol __ICFEDIT_size_svcstack__ = 0x8000; 从 0x40改为 0x8000了还是出错





出0入0汤圆

 楼主| 发表于 2017-2-22 13:33:53 | 显示全部楼层
suhob909081 发表于 2017-2-22 00:25
谢谢你的回复!我是用jlink下载测试的.程序运行到下面:
OSStartHighRdy
                                 ...

我刚才测试了一下,
我编译了一下,的确那个 *.icf文件搞错路径了,原因是我调试完成以后,把这个工程目录的文件名给改了以后,再压缩打包的。你就用工程中默认的这个  *9260*.icf文件即可。
暂时不需要改动。

我下载到sdram和nandflash都可以
如果你声称的bin文件过大,需要改nandflash的loader文件。
我放个编译好的给你,你可以下载自己烧录试试。
1个是loader
1个是程序。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2017-3-6 17:21:37 | 显示全部楼层
你好,你用的芯片是哪家的?有支持新塘的N32926的吗?

出0入0汤圆

 楼主| 发表于 2017-3-6 23:41:54 | 显示全部楼层
本帖最后由 Auir 于 2017-3-6 23:42 编辑
君达 发表于 2017-3-6 17:21
你好,你用的芯片是哪家的?有支持新塘的N32926的吗?


您好,我们的芯片是alphascale的 asm9260t, 经常关注坛子的朋友都知道,asm9260t比N32926先出来,与N32926是相互竞争关系。


出0入0汤圆

发表于 2017-3-26 10:42:11 | 显示全部楼层
asm9260t 容易买到吗?

出0入0汤圆

发表于 2017-3-27 09:55:23 | 显示全部楼层
shangdawei 发表于 2017-3-26 10:42
asm9260t 容易买到吗?

联系楼主可以给你代理商联系方式。
或者和淘宝也能买到的

出0入0汤圆

发表于 2017-3-27 15:18:09 | 显示全部楼层
mubei 发表于 2017-3-27 09:55
联系楼主可以给你代理商联系方式。
或者和淘宝也能买到的

谢谢,已经联系了,买了几个样品测试一下。

出0入0汤圆

发表于 2017-3-29 22:04:07 | 显示全部楼层
感谢楼主分享
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-2 05:44

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表