嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
9 G2 Z; w9 }0 ^
Void UPP_TASK(Void)
U) J( q8 M. G
{
' P: K; L8 `4 f4 w1 s$ A
& w* ^0 g% v# t7 F. O# w
int i,j,k,target_int_count=2;
9 p3 R* ~2 {. _9 ~( n) i
char ch[2];
$ B( p: e% h- w
) r8 |$ F6 Z6 G. G8 @7 z0 ]3 S
5 P3 `) u" J% N8 Q" j
* W) G, }9 f' k
upp_interrupt_count = 0;
1 m2 V% T4 @7 D6 Y6 b
upp_error_count = 0;
c$ B1 P/ [; P; M: W+ X
4 P. s* h# v7 J3 _* m
UARTPuts("\tResetting uPP buffers...\r\n",-2);
- o2 a0 a$ ^) P' O; j) ]' x6 ]4 o
// Initialize data buffers
( V; Q7 d2 A& _" z, Q. m' N8 L
for (i = 0; i < upp_frame_size; i++)
" e3 }% a! A0 o" @3 k4 I' t
{
" b# v1 c5 s: F" z% a$ D* @) e
upp_buffer_b
=i;
5 }: {. m7 r; O5 @5 z! N
upp_buffer_a
= 0xDEAD;
2 g6 z6 {: {" T: y0 s$ b ^) y
}
. _- x- a+ @7 R( O' T
5 |9 j9 h4 w3 U u+ s1 G
//for(i=0;i<1024;i++)
6 j% w X ^7 x& A/ f
// temp
=0;
; W0 {7 V' ]9 t0 _, c) O
/ a8 e( i7 n) d- |& J$ c% k
//UPPReset();
" D1 [6 v* f/ {: q- j
/*启动UPP DMA传输*/
( f3 ?: F$ ~+ E2 t; h2 I0 O- m" v
UARTPuts("upp_prog_dma_i\n",-2);
7 ]4 b" r: v3 @" G" q" N
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
9 F7 U9 m8 J \5 H3 P) V
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 S- S- D; l- S1 D
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
- L+ Y8 ~1 a, k( |: r* u; e
) w9 D, x# Z3 f Q0 r) ^$ u
UARTPuts("upp_prog_dma_i\n",-2);
3 s! r! I" B" ?1 `
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
q: R1 G/ t! L# n1 W8 f
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
( r. y& ?: @7 `, w8 o3 {2 V
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 ?/ H5 @8 t, C, p$ N
6 @! v) i* \5 ]
/*等待UPP传输完毕*/
* ?8 Y# g! U, a q9 Q
//i=0;
+ n$ C z3 J* g
//j=0;
8 X9 s8 @; v* k& P
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
' ]$ _+ K3 r' M& d* D
{
* Z) n1 N+ E/ F1 R- E
/* 测试UPP传输的同时操作普通DDR数据
8 }$ B0 \# |6 h0 q5 u
temp
=i;
5 m, E# e8 _5 I
i++;
0 X1 ^: H; v9 |
if(i==1024)
& N- R+ |" ?4 y" o
{
% }4 {$ e' C* u& F
i=0;
3 y. g; m$ J' p, }, k9 \6 [
j++;
2 W( N- E& C! E R$ F
}
5 i- c1 k, ?6 @! |8 z3 |
*/
% O0 ]2 o# a5 V0 P+ k& v
2 S* \, D& X' a8 A$ L) \3 ]
asm(" nop");
) U, J1 {, f& B
: |1 r8 v) X5 ~; h4 \
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
$ a1 @" ^! K3 b, i* Y* y
}
4 N8 P9 k3 P1 I/ X1 V
3 T9 W( s4 S- O/ L6 z* B* \* B
/*检查UPP传输的数据是否正确 (loopback modes only)*/
# |5 L$ Y. D8 W! X
//UARTprintf( "i=%d\n",i);
4 U# O" Q" q3 V9 e5 n0 p) l
//UARTprintf( "j=%d\n",j);
9 f' ?& E y* n9 e# w
UARTPuts("Data mismatch in buffers.\n",-2);
! ~3 [6 Y* E3 _: I) i0 N$ f
if (upp_interrupt_count == 2 && upp_error_count == 0)
- w( w9 W' l( N0 ?0 m5 W7 J; }6 J
{
! {; B5 h# Y" T$ z" x$ O# j
for (i = 0; i<upp_frame_size; i++)
- o5 g6 \; @7 a
{
. |9 F% S2 ?0 N; v* h* m
if (upp_buffer_a
!= upp_buffer_b
)
( |" E5 }, p, Y. ?8 r" F
{
9 y3 w- x/ Z# e5 E! o) z
upp_error_count++;
, A* F$ n4 \# W" F
}
; C& \2 X; v+ o2 H- n; o
}
L1 X3 L& t3 s" ~, k% d/ k4 M8 ]
}
3 n/ s5 z0 j, g1 L ^
5 _2 A. J9 B3 ? Z1 K" r
/* 报告通信结果*/
) Q1 G# I8 a' }
if(upp_error_count != 0)
. a% O) Q9 F5 ?3 ]
UARTprintf( "upp_error_count=%d\n",upp_error_count);
+ E9 r; b4 N7 k; o, R" H
else
+ C/ T) e+ G4 ]- b5 Z$ T
UARTPuts("uPP transfers complete!\n",-2);
" ^" E+ @7 F" i( C
) B! K3 h% f% v( D4 C! j
UARTPuts("Do you want to print all the data?(y/n) ",-2);
; o1 P" N1 y f
UARTGets(ch,2);
# S6 u' H6 Y% {" f
UARTPuts("\n", -2);
' {. I2 @* \, k5 O! s
9 t {5 L2 O- x9 p( w
if(ch[0] == 'y')
' O* X" j& T4 L# Q2 l0 p
{
! B* n6 t. R% w. j
/*打印全部读到的数据*/
9 h' b8 g [; E: r4 v& m. x
for(i=0; i<upp_frame_size; )
6 W* H B" @6 A2 N0 y+ }2 O0 S6 c1 E
{
' x; l9 K, L" i! y5 a
for(j=0; j<5; j++)
; K# r2 P, l1 o& D
{
9 y y' i& {! ?7 z% _' Z
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
5 F* b: S$ ?' M$ q' F4 g- n
i++;
$ q: p# P) y/ V$ E% P8 C
//if(i >= 4096)
, ?0 N8 L+ } x1 I5 i
// break;
9 O# G0 G' z$ ]# ]8 ~2 L! i& h
# D0 I* k Z) \; k
}
4 a7 x' T- \ C9 C; g H4 ~7 s; z2 w
UARTPuts("\n",-2);
s( N9 b& S1 @
}
1 @( d% G9 z# O5 q; A
}
9 H6 b8 ^% ?8 n4 V& a( v
" v. k( G. M9 A* M D8 M6 o2 b
}
; I, T" d6 } q' O9 \* s* R) ~1 A
* G& E; ]! A2 ?) l* Y. F e
" V. f" h9 M3 l! E" D( p# k
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
- O* D4 s3 Q; _2 ]; g0 {
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
$ A$ U/ O6 [/ R. o9 E& ~0 Q8 z
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4