嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
2 D5 Q+ F, [% E: o9 q! m# t8 x
Void UPP_TASK(Void)
7 f o8 h* a( |& S
{
% c _6 l6 i, e7 `. k: I4 k) P6 n
( u1 l& }# Q, \4 ^8 h
int i,j,k,target_int_count=2;
5 ?% h) I& y7 ?3 ?9 y+ P4 r/ n* T3 o; y
char ch[2];
+ H! U1 b& V X: v) D% L
' z# r1 }& ^8 w4 B$ p
6 j- _; |2 {- `1 q3 J4 M
" D$ c0 A- d1 x# Z0 Z; \" F$ r2 i
upp_interrupt_count = 0;
0 ^6 P/ @: H" j7 \+ ]" z- B: ?
upp_error_count = 0;
, a, z& _& @# D0 \( k$ r
- f& D# n; O0 ?( y
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- d$ r! e; }6 O2 ^
// Initialize data buffers
. d& G' n& M9 C
for (i = 0; i < upp_frame_size; i++)
3 w! G4 y, [8 h, v, R. o! j
{
- n [2 N8 z/ z8 t
upp_buffer_b
=i;
8 M; k; C. _. A+ _9 P# W
upp_buffer_a
= 0xDEAD;
9 |6 j% A6 _* F! e) U
}
2 A; \. l( d4 u" Q4 E) z- V
+ X2 a, ?3 s: P
//for(i=0;i<1024;i++)
. ]# r+ U- V3 D& I! n/ |! t
// temp
=0;
8 O! E/ y( y$ o
]) ?+ v) X( k
//UPPReset();
+ h4 D) n2 ^/ \/ i* ]( y
/*启动UPP DMA传输*/
3 t8 e s6 M5 W; Y
UARTPuts("upp_prog_dma_i\n",-2);
/ u6 ~% _4 O6 E& w
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
7 j" o' u4 t! r, G& ?
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
6 Z( C. C4 R, n v
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
. ~6 G" F/ Q0 p: q: f7 m
7 M& A# _4 L. O8 F
UARTPuts("upp_prog_dma_i\n",-2);
5 |- K! _- n5 E5 @, h3 O
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
6 e* c& H0 { ^0 ~
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: q y. I F) L( f
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
0 k/ I; S2 i& M V# Z. n* q4 a
) ^ c1 k/ b. B( r9 w d; K( p
/*等待UPP传输完毕*/
. o& x6 k8 J3 X+ e( O0 p. Q0 x! i& W- g
//i=0;
! ]9 c$ O* g$ }; T
//j=0;
A* W9 e* X7 K, L1 R
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
% _7 |* G* ]% U* _' x
{
# `* H: E+ V7 \6 b6 ]
/* 测试UPP传输的同时操作普通DDR数据
! s# I A" [) k
temp
=i;
' @! N- N3 h1 z
i++;
# @, x$ J) l) r$ X
if(i==1024)
* O- Y( m+ T6 F- A% ]
{
7 Z1 X4 k( R m+ B' `* B' G# o
i=0;
: e) {/ f& |) [- X% C3 s
j++;
, y9 ?, g6 `+ g( k! l
}
0 f+ x8 }6 C) G3 U, s- f
*/
8 e1 s2 s; d/ i9 f: f2 D! M& Y
' I. |' X: {* M6 q) Y
asm(" nop");
. Q% f$ K4 f( Z
8 g+ l1 U' }3 o
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
% \0 u8 A/ T: q7 V }
}
& j. Y" K+ y- a
3 t* s2 K" m; q) F. ?
/*检查UPP传输的数据是否正确 (loopback modes only)*/
6 ~# X! ~# C0 j3 _. K" \* n" b
//UARTprintf( "i=%d\n",i);
! B8 ?- O+ Q; e9 r1 A
//UARTprintf( "j=%d\n",j);
$ g g" P4 h3 r; e
UARTPuts("Data mismatch in buffers.\n",-2);
. o3 ?" W2 s$ h% C
if (upp_interrupt_count == 2 && upp_error_count == 0)
7 Q3 X5 V9 ^1 P) W, `0 C8 G3 u
{
3 n* H+ U0 g d s) T) l8 v8 M# F1 \
for (i = 0; i<upp_frame_size; i++)
) B/ M z/ j1 F5 |' ^6 c+ L
{
3 e/ q2 G( D8 E! G6 C
if (upp_buffer_a
!= upp_buffer_b
)
2 Y. s) x7 k+ v
{
3 z: z! I4 K4 q2 P' r0 S" K3 I( E
upp_error_count++;
) R3 l# ^- {; ~$ J
}
: {$ |4 f. k& L0 _" U
}
3 R& f: E) w' `) g" k1 y5 [
}
+ K" _ y: B4 `' B% z# m
4 S. y6 M4 g& `8 G* T" ]
/* 报告通信结果*/
' Y, G. d' ~* s: y# W, p0 h
if(upp_error_count != 0)
0 X- `9 m8 X6 T4 n) I) Z
UARTprintf( "upp_error_count=%d\n",upp_error_count);
3 N. d( ?. H1 N @/ g8 {) X
else
3 H. {7 V: `: j
UARTPuts("uPP transfers complete!\n",-2);
1 j& W/ `4 u$ d& H" e) P
. t2 ~) \! p8 y% O
UARTPuts("Do you want to print all the data?(y/n) ",-2);
' d% M8 f ?/ t( I4 A3 O D
UARTGets(ch,2);
% |% P" q4 ~9 z
UARTPuts("\n", -2);
5 L) a: T6 E( N" R' N$ L8 g1 X
# i5 h+ y5 B2 P. T% ?
if(ch[0] == 'y')
4 ?) Q( X$ V6 F: a4 A
{
5 @. z' ^. m _. V9 L4 ~ o( l
/*打印全部读到的数据*/
" I7 _8 v3 t* \7 V: N' L
for(i=0; i<upp_frame_size; )
8 |( k- v; b# Z8 V
{
@1 o0 w8 P2 @' q( q* y7 ~
for(j=0; j<5; j++)
3 T0 L& P/ B3 `& S) x
{
' G) w# B0 }9 H0 L5 `9 C+ `9 d: M
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
" {9 X, ?! [; {- F" r" a! ?5 E
i++;
6 e2 ]/ |6 w6 |0 }& N
//if(i >= 4096)
2 |' B; H+ g1 W: q; R
// break;
' j" ^. Q1 `9 N1 l0 d
% C% y, ~. F: p
}
) |, J$ R P8 Z$ W' I4 l5 G9 \; H
UARTPuts("\n",-2);
# L8 y0 s5 _* F
}
# O* r; {$ a& [, D6 Y% f
}
. A( h7 S+ U* J# D c! e
+ }6 g/ N$ t) g" k& H3 K; j2 b7 k
}
+ ~& [$ j: X2 X U
/ D5 F# o# r; ^$ U$ K+ p' `
`; _8 n6 Y* u; X5 v: I0 E/ ?, }- S
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
: k! ]' ]" a2 G5 n4 _1 S3 j
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
' F! ^5 ^! }- e/ X
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4