嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
\" Z2 s" n* u9 u; Y
Void UPP_TASK(Void)
& s6 L8 [7 ]; \; a
{
+ m0 V. n2 s, k1 m/ D( k2 v
9 u% D5 L F. T; c( g# b* f
int i,j,k,target_int_count=2;
5 A: x3 o& |7 ^7 d6 I- y! d. U
char ch[2];
+ g1 }! N% ^: K
4 X* v( A# A& c& N- t1 z0 k9 P( Q
4 @( ~( N$ ~" o( h8 d3 l B
8 P" T( f% B& Q* D) H
upp_interrupt_count = 0;
) [# z: L. [8 n3 B
upp_error_count = 0;
4 F* U: K$ T, L) F3 ]
( t l: d) V( G$ V1 T! ]$ T
UARTPuts("\tResetting uPP buffers...\r\n",-2);
: C3 B$ J$ s* v z$ h
// Initialize data buffers
# z" L% S) ^/ e0 L' Z9 Y6 y* P+ d
for (i = 0; i < upp_frame_size; i++)
6 F( Q4 s8 n! i2 o; `( A* I) l
{
' U0 v$ b: J" e7 P& j0 b D- e
upp_buffer_b
=i;
& t! K; q" R" @* V- `4 S6 ]: j4 F6 H
upp_buffer_a
= 0xDEAD;
( M3 ?) o2 I# l# ], \
}
5 n8 |# K+ {; s0 B( }' i
; J9 G9 n% N8 F& y
//for(i=0;i<1024;i++)
" a0 E1 k2 U! e- z% O
// temp
=0;
( `/ u2 \; h( t$ s# o8 j
/ h2 n5 R' C+ o& o2 C" ]$ f- r
//UPPReset();
* I* r3 B4 Q0 k1 T8 {
/*启动UPP DMA传输*/
1 p9 M4 n! N, [! S
UARTPuts("upp_prog_dma_i\n",-2);
! z; ~9 V' m7 q; \+ F6 u7 R
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% n' t' r* l$ V0 U
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
0 e1 Y ~& } ~. `
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
8 R8 w( I, y- t* g3 X: J
: e3 N( n3 H: b" x3 E
UARTPuts("upp_prog_dma_i\n",-2);
+ q+ N4 s; z& p5 Z1 K! O
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
3 t, n0 s) d& q) T7 q0 I
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 R3 b! O! q. g% F8 M% H
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
5 a, T f( X8 @' z- K9 _
/ N! n! j( {- A' N6 T* J
/*等待UPP传输完毕*/
5 L. Y8 [, m# l! f% Y7 d5 [! M# X; A: \
//i=0;
R4 x. k# t- t9 v h$ V2 Z/ P
//j=0;
. v) O8 j' H) ]8 | }
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 _! z; b! v" ]" y) w
{
- ~( |% {4 k( ^1 z% s( J# T3 G4 L& b
/* 测试UPP传输的同时操作普通DDR数据
$ n3 O. u( w. x4 o& z9 h' {
temp
=i;
% D9 X! [5 H V$ @+ k
i++;
* p! O* m; g' ^3 Q' J. \& e+ f2 R# o9 t
if(i==1024)
7 ?# D4 r# f# t
{
, s2 E7 a2 U9 r8 @, n; V
i=0;
# r! i+ \( J8 m# J" O
j++;
) Q1 R4 X4 {) u( E/ r
}
6 A: w! G& }! x; M; _, n: N$ t7 H
*/
& u: }- e0 R+ _1 Q: o6 y1 g1 U
# G; s) p6 i, M2 K a e
asm(" nop");
3 q& R/ B% {0 f+ a
8 ]; n5 w5 W- o- Q9 T; `/ `, i6 A
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
; S1 K( R* g4 l" [! h" G( c" u! Z
}
r' b/ {# k9 q7 D9 O! f
! L, A, W# c. `0 B$ c T' `2 O) ~* B
/*检查UPP传输的数据是否正确 (loopback modes only)*/
6 R! S b/ G" a/ z2 u
//UARTprintf( "i=%d\n",i);
- W9 C- Q! d, I% e' u
//UARTprintf( "j=%d\n",j);
; m4 `2 U* ?+ ]& S4 {
UARTPuts("Data mismatch in buffers.\n",-2);
& A5 |, \+ d4 r0 O7 r
if (upp_interrupt_count == 2 && upp_error_count == 0)
& H& N% q' ?1 E6 b0 h
{
" E: o3 |7 g1 a$ ^0 x9 ?
for (i = 0; i<upp_frame_size; i++)
2 n% Y4 Z* M' c) e, J% Q
{
: p# d* t8 X, \7 P* j8 W
if (upp_buffer_a
!= upp_buffer_b
)
( J/ v# P% x' R% ~2 y3 [# u. W
{
6 g0 o4 j5 N3 t; d5 e4 K. L5 U$ u' Z
upp_error_count++;
# B( c9 P5 }! z
}
7 t- s8 @7 A- s( z3 u$ H$ n2 j
}
" M5 K: d! d% H2 [; O5 ~
}
& a6 U; y) w6 r
( g" m0 u' J. |5 g
/* 报告通信结果*/
: {2 Q% ]; j; x
if(upp_error_count != 0)
& a& @( E9 }7 S6 `' I F
UARTprintf( "upp_error_count=%d\n",upp_error_count);
* I; }% `$ D* Q
else
; {; Y3 l- w! @& L5 A! z3 o' D
UARTPuts("uPP transfers complete!\n",-2);
; ]' i/ @7 E6 N( c
2 z! Z0 M7 c5 b+ r- `2 d# b8 k6 A n
UARTPuts("Do you want to print all the data?(y/n) ",-2);
4 J( N3 S2 p2 ]: r
UARTGets(ch,2);
2 R& U- t: e& Y& t& m' K9 c
UARTPuts("\n", -2);
* l2 @2 ^6 W7 D ~9 l# n! n
& n( h* P" c2 I. f* P: G7 t& z
if(ch[0] == 'y')
; J( B* e6 U, u2 {
{
. z* {+ s: g% j+ p; ^
/*打印全部读到的数据*/
# r4 q& j+ m% n9 X* C
for(i=0; i<upp_frame_size; )
9 a j) u* D7 ~4 e% f- [9 B
{
' W9 S( ?; L+ o
for(j=0; j<5; j++)
3 Z. T0 B, Q7 l+ e0 a
{
+ a* ^6 T6 I1 Y! a
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
; E$ R+ s8 S/ o+ Q! }& |) R' v7 }
i++;
- M' v) ?/ s- F! h5 \
//if(i >= 4096)
7 ^% r2 q4 ]- J6 S# v4 S! o r6 w
// break;
* k& V! v" F4 K! {/ l* c
% x9 V. J& B- {& k w, i. R! y: v
}
" R3 }) U' x* Y$ K
UARTPuts("\n",-2);
: D' v: a: R& |$ \9 _# i
}
9 j% T7 n4 R. w% P( m1 n4 r
}
) Y! E4 C' s4 z) T$ @
) j, e0 \, R8 Y- N
}
! `% o2 t+ Z( ~5 k/ R/ J3 u5 A
$ X* X: U: Q+ h9 I
6 R) }9 I) c5 w6 f9 \
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( ? j: U9 M9 r5 s7 W* c
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
# e/ |3 [# a/ k& q
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4