嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- _( S+ X$ P. u4 r/ Y: G- L
Void UPP_TASK(Void)
4 |+ P3 {' Z3 a7 Y6 X: D
{
, ]: r$ ` s \0 K! x
5 y k! s' Q9 p! m( s+ m+ U+ ^
int i,j,k,target_int_count=2;
1 E- T& ~4 \( o, B8 }
char ch[2];
; `* A, Y( y8 e. d
9 a' l m+ A6 H. Z- x( l& \( m
; K, S2 }2 w4 f) w
+ d8 U5 g* n" U& ^8 r! o. C- H1 n
upp_interrupt_count = 0;
* X% e2 B i. }1 ~2 X& j; G! \
upp_error_count = 0;
4 v; J& f* _0 j
7 p" }; ^# \: v' @; p3 e
UARTPuts("\tResetting uPP buffers...\r\n",-2);
7 z4 [: a5 N8 ~2 s/ b) l* J
// Initialize data buffers
2 H. ]* E3 ~& t5 U
for (i = 0; i < upp_frame_size; i++)
# l) b5 J' _. w5 L6 t
{
9 i* h% Y: }4 y, p& ~+ J. I
upp_buffer_b
=i;
8 p4 W# S5 n' Z1 t' Y- x
upp_buffer_a
= 0xDEAD;
/ l8 e# ]) U9 _2 ^0 K: g* T
}
N& {/ H3 X7 }0 Z
1 D' \+ ?1 C* T/ z' C
//for(i=0;i<1024;i++)
- R* I* r1 p9 b' a6 d# z q* m
// temp
=0;
' O2 f% ]0 v- T4 _0 U
, E- X4 V7 r' h, r& e* \
//UPPReset();
2 q0 Y/ j7 G' ~# g
/*启动UPP DMA传输*/
! l0 h2 T, c% a! S/ g2 s
UARTPuts("upp_prog_dma_i\n",-2);
) U9 B- ?3 s! P- Q
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
; _: Y+ |* \8 |
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
f% \" X1 j# h9 r/ K' P) H
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
1 }/ y B5 a' ~4 M8 ?" r8 V
1 u/ J8 h4 t0 S& X
UARTPuts("upp_prog_dma_i\n",-2);
9 Y* x; n( C7 D+ N
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
2 V' d4 H- l2 m2 g6 h- I: u+ {
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
$ k! i7 |. n R# y. a' c" h% S
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
1 S, v5 @ l: ?& K& M; i5 i
+ I5 _1 D7 y. o$ R
/*等待UPP传输完毕*/
( i* E* r! M) J2 ^3 a; a* `) q
//i=0;
* P5 k0 {; t6 _! e. U9 z
//j=0;
0 R4 U1 E1 u L. k" g- r6 h
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) E; L: P9 V B& ?# j V0 _
{
% d( t* z$ A) I% n3 u! u
/* 测试UPP传输的同时操作普通DDR数据
R; x0 ^" y4 v$ M
temp
=i;
( a. t# H! X6 N8 L( W1 ?
i++;
) X2 @( d0 w2 V o; y2 d
if(i==1024)
6 N5 _+ G/ `, s4 ^7 T
{
+ q" O! y" Z7 b
i=0;
% @/ g: h8 r9 y4 V* K
j++;
$ `. N, G6 ?* S' v
}
3 m5 K8 b2 O: G2 E, z
*/
4 g. _$ b j. R# y
# Q F- Z3 U/ h( S/ i& V( R1 b
asm(" nop");
* S- ]1 q, |/ m8 F) _5 U$ r
& e! I5 w1 `2 T3 B" \, o( Z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
9 r* Y0 w) D4 i n# ~8 k
}
. F. u, M4 M2 O0 g9 x/ b
& u w0 v9 p* m# f2 r
/*检查UPP传输的数据是否正确 (loopback modes only)*/
, h# F3 Z: I& I$ l
//UARTprintf( "i=%d\n",i);
' ?/ U2 _2 d, M* ~
//UARTprintf( "j=%d\n",j);
' `, M4 U- \4 R3 ~/ m6 v, T
UARTPuts("Data mismatch in buffers.\n",-2);
1 g% s/ r& J. [' g7 q
if (upp_interrupt_count == 2 && upp_error_count == 0)
3 {. K! @: ? F4 c- s! v2 ]
{
3 V! z; B6 X6 g& y2 W9 F; ~* Z1 N
for (i = 0; i<upp_frame_size; i++)
2 i- Q* [; U, ^! u v+ h
{
4 s K9 @- U$ z3 A$ E: F$ J. x9 C3 W
if (upp_buffer_a
!= upp_buffer_b
)
2 C3 x9 @1 K: f! V
{
* A2 Z# x0 j" }- `; h
upp_error_count++;
: Q/ v4 V S3 {2 l7 |2 a# F: O
}
+ W! k. u G5 X
}
( W M0 U0 D$ @. p5 L
}
/ j; Q4 F) r0 s
" _9 x1 x8 a2 l l
/* 报告通信结果*/
5 w1 o& T1 _, a
if(upp_error_count != 0)
: S6 K" p! E; D! H: k
UARTprintf( "upp_error_count=%d\n",upp_error_count);
1 s9 z# u U. R( L$ P( r
else
& Z" q `& {7 }
UARTPuts("uPP transfers complete!\n",-2);
' `8 w$ x3 O" c) S5 p* L' V x5 F
# K' n+ @ O X; Q" Q
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 V+ S# X8 [. X' ]' u
UARTGets(ch,2);
3 ?- i. u$ G8 p6 X8 |
UARTPuts("\n", -2);
: k. ^, i7 ~9 y& u9 T4 _' p0 h
& {* y; O6 ^2 i0 L8 {9 Z* T% C
if(ch[0] == 'y')
0 a/ f- K1 \- o# f
{
/ I4 _3 d* i" c5 T. v
/*打印全部读到的数据*/
4 T( n. L8 {) B( x
for(i=0; i<upp_frame_size; )
% j1 `/ \1 E8 J* m; [5 f8 [
{
2 K: n/ g3 y4 l8 @7 _& D5 b8 @
for(j=0; j<5; j++)
( {- ]* b# M: i, J) O3 [9 k
{
+ q' j/ c+ f& X
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
7 l7 H2 J1 u( D. _
i++;
+ v$ q9 X. J( J8 `, [0 K1 ~
//if(i >= 4096)
3 d9 V% D( T! B+ q
// break;
& F8 f, U, N% }+ I
* K, d5 A' y! A* C
}
3 P2 ?8 m* q+ q; O+ q
UARTPuts("\n",-2);
" p# z0 [0 N9 |1 E( i
}
) b# U. _4 o( @! N4 N( D: q/ ?+ f3 D
}
6 n; \- F/ ~: q+ I" g2 A7 ~
4 ~6 M- S2 M: x0 @; g5 v1 s
}
7 _+ Y3 ?! v3 y2 H+ s _( C
! J) q* O- o: `: {
, h% ?6 M2 h# a- l' d
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
/ S2 Y& }* j) b7 M+ |5 g$ Y X
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
; s& r9 ~4 i5 T- j/ g1 f
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4