upp问题,在SYSBIOS下的应用问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2014-12-22 14:35:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
4 z- \' a! \+ X! J
Void UPP_TASK(Void)
$ o  ^* M. K2 o* l{. o7 u; l3 l' P" o5 R# I, U6 s4 q

4 I3 n5 ]0 Z# @  @% a    int i,j,k,target_int_count=2;# A  e1 I9 q5 i' r
    char ch[2];% z6 |- `0 |* d- u8 B) V7 {

' \8 Q5 m; ]- d% Q* E2 w# o' |% {$ q
) @# x! k3 o5 Y
    upp_interrupt_count  = 0;
2 N. l8 U/ X2 h) d6 k! l    upp_error_count = 0;
* b5 w5 k" g6 w1 ~# k5 y! q' X0 ]9 z, F
    UARTPuts("\tResetting uPP buffers...\r\n",-2);0 a: x" r9 h4 [$ `' z2 X$ p
    // Initialize data buffers+ e& B. H" z/ s  o" K- A: r) o# w
    for (i = 0; i < upp_frame_size; i++)
  _) z2 b- A' g2 O/ A    {6 j, H6 }8 |3 |& E* J# ^
       upp_buffer_b =i;) q  X; `- [8 u0 U% x) _
       upp_buffer_a = 0xDEAD;
. x& P6 O1 b6 n    }
/ M4 C7 S: i& Y5 z- V' ]
' d; A; J5 m8 v! W, F( f    //for(i=0;i<1024;i++)
' t- Z$ ~# ?* s# A4 X& M    //    temp=0;. _1 e7 Q5 R; f  T6 Q+ R

) q+ S, d2 g: I    //UPPReset();
5 e+ h, L( k/ O% y    /*启动UPP DMA传输*/
% A  ^3 E0 L  o1 ^) g1 ?    UARTPuts("upp_prog_dma_i\n",-2);( E) b) [  e! Y0 K
    upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
- ?) F  I: ]# E( ^6 E( ^    upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
  g$ [/ Y# q* ^    upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
: Y9 ~( Q/ j" }) b" [
5 `8 i7 x& v4 U3 Q    UARTPuts("upp_prog_dma_i\n",-2);2 k8 c; z8 b+ q8 F, Q: [
    upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;1 F- x2 O6 y$ t9 Y7 H, n
    upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
% I7 u! H; k8 @. j' n6 N, `    upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);4 y8 P1 d2 W( t$ ]& y# q$ A) c

1 L4 y$ ?: l! }. _& J+ w    /*等待UPP传输完毕*/
; o2 u+ H  R0 l# H) ~; z3 p1 m    //i=0;3 E. E& U5 a8 z% p4 k. a; _- c, b
    //j=0;
5 m0 t% Y  t+ M7 T: P3 s    while (upp_interrupt_count < target_int_count && upp_error_count == 0)# `' O' b" A- j5 a
    {
6 T& C! B8 b$ m, n8 q7 q4 c; p        /*  测试UPP传输的同时操作普通DDR数据1 b5 i& x( D! h7 O  U+ |, B
        temp=i;
/ z' g9 {/ q3 G        i++;- g7 f$ W5 X5 K, Q+ x
        if(i==1024); ]& ~) s& {( F4 E+ b1 _" a) e
        {
3 `% n5 \$ C: [4 v            i=0;
' X+ S$ ~8 g# C* u  U! U3 g8 U( X            j++;
3 l8 y' b6 G9 Q' k7 k* f' |( l* r. H        }
% ]' m; G) U$ _- k3 v1 |6 Q, d2 s        */% H+ C- I, \. I
, `5 M) k4 e! A5 z, G' a9 o* l$ Q3 u3 S
       asm(" nop");
" _) P8 b3 A9 p5 e0 f4 j0 m) k% }
1 b$ E/ q6 o- H9 [7 v0 j! Z4 {       //UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
3 S3 Z3 J. K# d& x+ `    }
8 u3 |+ W. d8 s+ s9 d8 L7 N4 `
5 S4 G9 |0 H* A! u    /*检查UPP传输的数据是否正确 (loopback modes only)*/% F" w/ u/ M% I! T/ c
    //UARTprintf( "i=%d\n",i);
0 S$ X" r/ S6 A( g6 p6 c    //UARTprintf( "j=%d\n",j);  ?0 X1 H' G/ A  c0 g6 o/ j+ q
    UARTPuts("Data mismatch in buffers.\n",-2);
6 w1 f9 N7 j8 j* T    if (upp_interrupt_count == 2 && upp_error_count == 0)9 i' p& m2 ~, v! [
    {
# j; a. M$ d; r: q; A3 d        for (i = 0; i<upp_frame_size; i++)% ?) b" E& v* W
        {
: S# w( J: m# U8 ^6 ^# o1 l            if (upp_buffer_a != upp_buffer_b)
  F  [+ P% o" b0 d4 T! J            {! s2 y/ n1 r, n+ B
                upp_error_count++;7 D3 I% T( |0 V5 `" }' Z% W+ _6 ]
            }5 r# F5 A( K, V! ~" K$ E* ^2 t/ O
        }
6 }) O6 w% P/ I! q7 R; T    }
3 M: m/ N! {/ e" ?4 N* ?8 e) y- [/ u4 P
    /* 报告通信结果*/
* O) ]. O2 \2 v: q8 e    if(upp_error_count != 0)
# a3 E) t9 {# M# e, l2 j5 m        UARTprintf( "upp_error_count=%d\n",upp_error_count);
0 [4 q3 A5 O- V8 X" ]2 D$ q  [    else9 o" }+ w/ k+ @* E7 _4 [
        UARTPuts("uPP transfers complete!\n",-2);" v3 P- X5 M  c: S4 o
$ ~. a2 F8 Y) L% {  G- }2 [8 N
    UARTPuts("Do you want to print all the data?(y/n)   ",-2);
3 B8 p: [: e7 P! g2 A. I    UARTGets(ch,2);( e8 d* v( p4 Q, X
    UARTPuts("\n", -2);
% Q2 T+ A1 i$ \0 }7 ^- j8 |3 E9 Y( @4 l
    if(ch[0] == 'y'); [) x5 f4 @- N, S( r
    {
' j; _0 e7 }# [% m. G! O        /*打印全部读到的数据*/
0 |) _5 y' W# r- Q: X$ k        for(i=0; i<upp_frame_size; ); D1 @% ~4 l) v' \
        {
$ [2 O) `$ S# d            for(j=0; j<5; j++)
0 B# S4 n6 L) D9 E! X            {; f, B" }% b7 l  r" k# h& b: O3 d
                UARTprintf("upp_buffer_a[%d]=%d   ",i,upp_buffer_a);/ V8 p$ X5 g8 O2 e, W
                i++;
% ^: h. [8 k6 P/ e6 \+ T8 h' Z                //if(i >= 4096)
) @+ Y: v- z; v; Q3 d4 r: V                //    break;. o/ b1 C) U0 R* I
- x1 G) d1 G0 O+ Y! {2 \
            }
, u4 W/ c# r- U8 u0 C            UARTPuts("\n",-2);
9 V1 S8 b! l. g1 F7 W5 O        }5 e4 t& ^7 t6 d
    }
- S% a/ T$ h6 S, Z! w5 y1 x6 U( b" J' h* n3 }# R
}
% J% _; t6 j" l2 {5 I

3 v% U# w; G+ S2 b/ p, b/ e# z2 Y9 d6 O. P, V
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2014-12-22 16:08:56 | 只看该作者
追加说明:任务是空闲任务,因此没有做循环。
& G& {9 L$ ?: Z! ^$ b
回复 支持 反对

使用道具 举报

0

主题

184

帖子

1137

积分

QQ游客

积分
1137
板凳
发表于 2014-12-24 18:06:21 | 只看该作者
多次执行是没问题的,最好不要用空闲任务,优先级太低。
0 J# L5 f4 K: C+ x
回复 支持 反对

使用道具 举报

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

本版积分规则

点击跳转“创龙科技服务通”

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

GMT+8, 2026-3-30 09:40 , Processed in 0.043242 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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