upp问题,在SYSBIOS下的应用问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 6740|回复: 2
打印 上一主题 下一主题

upp问题,在SYSBIOS下的应用问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?% F2 j1 q9 E5 Y- K4 r2 c, a
Void UPP_TASK(Void)' Y9 O3 c% H7 V( X
{
7 S; G. b0 P& `5 G2 q1 V0 Y: a- `( b/ n2 y" P
    int i,j,k,target_int_count=2;, u3 V2 |2 B' |8 u+ n- p, t) j
    char ch[2];9 L+ Y( }! K7 U8 O$ h
, |8 Z, R# c- X
% G- s" b3 u8 z) T0 k0 ~
5 V  O' c4 h4 Q- z- k( M3 }
    upp_interrupt_count  = 0;
* t8 \% L# q+ T/ k, x4 \" Q    upp_error_count = 0;' b0 @, k  x* N

% U- A# E! X1 d- S3 Y: ^+ I! ^    UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 ^7 W5 C; a* u; A7 l    // Initialize data buffers! d  ]: n8 o( ], @( K
    for (i = 0; i < upp_frame_size; i++)# n  J, J, T. ^6 w9 H+ z: b
    {* i  ?; u' z9 L( `( b( g% h1 w+ X
       upp_buffer_b =i;) h8 p4 A4 t4 Q6 ]9 x* J8 G
       upp_buffer_a = 0xDEAD;" ?' G& m' c8 L4 ~1 ?1 e
    }% W7 i8 n5 ^: {; I1 u3 ^
" A7 y4 C9 C7 k) j) V; q
    //for(i=0;i<1024;i++)# O; G9 z7 j9 r! W
    //    temp=0;
! R1 @2 [3 [+ ~$ z2 N( n1 W
" @1 j# C, D" y. U% d$ l0 B    //UPPReset();1 g9 S3 G  Q8 R% F. F  Y
    /*启动UPP DMA传输*/. j0 c  R; Y  X" u4 r; B9 K
    UARTPuts("upp_prog_dma_i\n",-2);; L7 t! G3 J+ v* r5 ]: Z* [8 _
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
/ Q1 L7 K- P% q- j4 }& B; _+ `6 y3 B    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);- [0 E! j7 d4 [  I1 ~3 y6 {, n
    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);; U& r0 ^- _% p- Y( h* a

9 f) _5 N* ?4 x! [) T* v5 F    UARTPuts("upp_prog_dma_i\n",-2);
  {& W% G* N2 \# x8 Q7 I9 U, K    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
4 R5 _  s  D: F3 B( ~8 w; F    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);3 F- U( }' P2 u$ d
    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
' `3 L( |, ]# T) k6 F
4 U& U9 M+ v; P    /*等待UPP传输完毕*/
: q  y+ e& X1 W0 m* d! H% _0 I( y    //i=0;
, A( F$ ]0 E; U$ v. O    //j=0;
: Z: r. M( s3 J    while (upp_interrupt_count < target_int_count && upp_error_count == 0)" V+ D! r) O' s( ^/ V! ?2 k
    {
, Q. P; c2 ^$ p        /*  测试UPP传输的同时操作普通DDR数据2 }+ [) {3 ?. j
        temp=i;5 A, L% R  s6 t( Q- g
        i++;
- I/ _# J% H) S$ {7 h3 z$ j. R; _        if(i==1024)  ]1 D: X9 j4 `3 i. Y" C
        {+ [* t" k7 R5 s( D
            i=0;6 M% I  B9 M$ h6 Y, Z. a0 Q
            j++;2 ~: _# ?# w- o# C. _$ h: P) u. }
        }- ?: w1 I5 ~/ w8 z
        */
2 a% a( R% ]4 M* w' T4 Z# K* J; f$ o  h. w8 r( R7 R* o
       asm(" nop");+ h0 ~0 c5 D9 B  R/ t& z

$ R9 ~- P% m( N1 t+ L  S       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
4 L) f+ o. C  a" o9 _1 l    }5 _8 [3 E; k+ R2 f
, m# `- O1 R0 k- k7 I
    /*检查UPP传输的数据是否正确 (loopback modes only)*/5 j4 _) F. ^4 g% l2 a' V
    //UARTprintf( "i=%d\n",i);
' h# ?; a0 Z# @# R* t3 d3 {* M5 j    //UARTprintf( "j=%d\n",j);
) @& q; y, l( u# a$ Q- V9 L    UARTPuts("Data mismatch in buffers.\n",-2);- {% R1 D  ]9 p
    if (upp_interrupt_count == 2 && upp_error_count == 0)
: A; o* f0 |# ~    {
4 W# l) y: D6 Y6 v        for (i = 0; i<upp_frame_size; i++)
/ C6 Y; o& V" z; o% }% b7 O& ?- J% j        {9 ~4 v. w" X  W# G
            if (upp_buffer_a != upp_buffer_b)
  P5 x. _4 L& r" H- n' ~) @            {8 m: V# O# X; W7 F
                upp_error_count++;, f0 S( j4 w- y: R8 z- k
            }3 {: ]! g. k2 u1 H4 F# W
        }
5 |0 h9 |6 B6 F% v, \- B' |    }6 ^# ~$ c1 B, J, t9 y/ G2 m
6 t2 i; ~+ P2 F; F
    /* 报告通信结果*/
1 p  {5 D1 D# p# u7 `% X/ b    if(upp_error_count != 0)+ K# O$ h+ S( H3 q: W9 K: T% L2 W& q
        UARTprintf( "upp_error_count=%d\n",upp_error_count);3 {# `: S- Z% T" Q( |
    else- N" ]' C- K' x- t
        UARTPuts("uPP transfers complete!\n",-2);/ T0 ]9 N, g: j5 u! U8 {9 C0 K
6 i- e- G; l* D
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);4 X) N# |; C+ d# Z, J
    UARTGets(ch,2);; o) O- x9 R$ t& T
    UARTPuts("\n", -2);
; d+ S7 R% s; t- B- K. I/ ?5 S2 w. f
    if(ch[0] == 'y')
/ g; ]. w1 m2 |/ s. P    {
0 T, ]( S' F9 X" @        /*打印全部读到的数据*/2 I* Y( o) a. [/ n0 n8 x3 y1 J
        for(i=0; i<upp_frame_size; )2 y- ]1 Z0 U* q' G6 u1 D
        {4 \5 I' ]& Q0 c/ H! X' t
            for(j=0; j<5; j++): E# [( @$ t; s9 G* ^
            {
/ M; y& h3 Y+ q+ s7 E                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);
7 M7 s2 D9 `8 Y/ w                i++;
9 [9 Q4 i% G# F; {5 [$ ]3 l: i                //if(i >= 4096)
. \6 ?4 J$ g: T  ~0 C                //    break;
1 n5 t4 P0 |9 ], ?6 ^+ U- h
, z" X) d8 N+ V2 j- i; i5 _            }6 Y( K; j/ x, _& [7 d4 m: V5 t
            UARTPuts("\n",-2);
% @3 H! ]7 L3 b8 I- X; H0 ~        }
3 m9 R: y  p" A" B0 n    }9 v* B( J  O6 c/ N

  C% a6 r' y! w" W) g9 p. R}

; a3 v8 `8 v  _

7 p! V( h: e2 ?, z0 C  f) s4 q- d5 ^3 `7 V/ X
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。3 a5 d7 G: ]9 D
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
" f* `! Y) k1 p/ y% `0 D
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-22 08:11 , Processed in 0.038977 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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