嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
: C& }+ D; ?3 L6 i9 O0 Q
Void UPP_TASK(Void)
: G; T& w1 }) h
{
7 h% t+ W. ]2 L# w) B' i" N
; ^& q, q- g0 p( P8 B
int i,j,k,target_int_count=2;
2 w4 N, s7 G1 z0 l* v
char ch[2];
. C7 R" @$ H% D' S8 \$ C6 G
7 M+ ?+ X, Y4 O
1 t! b+ H% s" y' ?3 ?4 Z' Y6 o$ \# G
: |# [+ r y+ Q& ^$ _4 M& l
upp_interrupt_count = 0;
! P9 b; l5 \# j2 V5 _ G l
upp_error_count = 0;
5 T! ~7 E# }' q" u7 U# s- J! G' Q
' r% O8 f( [% M
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; N8 R7 u& z; U G% M4 D' Q
// Initialize data buffers
. w) {+ y& R' F) b/ b0 {( H
for (i = 0; i < upp_frame_size; i++)
7 ?. j7 w3 ?; a" R4 i S. T
{
( n0 K6 y( [) y( U! L
upp_buffer_b
=i;
2 _7 }* [; I" V4 a2 @+ @4 s
upp_buffer_a
= 0xDEAD;
" F6 W+ c* W* ]3 L
}
( y5 f6 D& j4 J- f D7 i% b
9 H( C. o3 P# f% w4 n" d8 K, ?
//for(i=0;i<1024;i++)
- @% d$ a1 L8 a, ?1 D
// temp
=0;
) v B- d3 ?: F2 z) p' L8 {
, ^) X( q A |& a8 F5 z
//UPPReset();
2 F, q, [/ B" Y- X; `* \
/*启动UPP DMA传输*/
; a; k) q) g9 P, a
UARTPuts("upp_prog_dma_i\n",-2);
9 N( D$ R6 R5 I3 ?: x$ Y) D
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
* o2 J7 ]+ r3 p1 h. g% ~
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
/ x! J7 N4 Y N& ^/ r
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
+ o+ w/ l, Y! c# O
8 i5 k& ^' ]9 Q& [- ]
UARTPuts("upp_prog_dma_i\n",-2);
9 A9 N' L( i' R
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; ]3 O! h% M6 J. @- T' f8 G) `
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
& f4 k/ x1 B7 i% l/ S
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
: D, {: e5 b* j
5 w) T8 }- Q- X n& c4 j( u
/*等待UPP传输完毕*/
# T- O9 v; s d4 x4 {/ V& L1 M( S
//i=0;
$ \+ V: X" C# O0 R/ \
//j=0;
) y, H& \/ c1 x
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
6 J* R! a+ x3 E/ C4 ?
{
0 D9 y+ {' B: N8 q, k
/* 测试UPP传输的同时操作普通DDR数据
( X1 A* N; q; h+ l4 R( x) f: _( p
temp
=i;
; T) Y1 m/ ~9 U+ Z1 B: Q6 @9 [# O- I. P
i++;
! n6 t" v$ R+ X
if(i==1024)
3 H, s. D+ o; ~2 W) I( w2 o# s
{
# \; [+ v9 P4 r+ ~. ~! A
i=0;
& U2 u; i d. I; X2 Z0 F9 Q* b' ]
j++;
; o7 c7 e, d- o, b
}
1 x$ E v& V4 l: `8 d. ]1 h
*/
& b6 ]2 S# k+ ~+ Y/ [- c
# F* l6 W: M! e6 y
asm(" nop");
z8 Y V$ [% X# \, h
8 `4 e* j7 L7 h2 @' X z
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
( z% x( C4 ]4 s/ b" h7 t
}
* H% I2 O1 K7 ^( p* b4 j
4 V/ Q: V# _5 m) l5 ^
/*检查UPP传输的数据是否正确 (loopback modes only)*/
9 S2 g3 P3 D, o1 E$ e7 X
//UARTprintf( "i=%d\n",i);
2 l' y3 w, K+ O4 S. k; }) q' g5 G
//UARTprintf( "j=%d\n",j);
{ a+ u1 u" B, i2 a
UARTPuts("Data mismatch in buffers.\n",-2);
* g9 G b$ F& P! e% ~8 K
if (upp_interrupt_count == 2 && upp_error_count == 0)
1 z( g' @7 J6 g; X+ \, M! {4 i, C
{
( W* e$ B& x0 H
for (i = 0; i<upp_frame_size; i++)
5 K# J! t1 @! Z% Z; ~2 ?
{
: @ K+ h' y+ n5 |( A
if (upp_buffer_a
!= upp_buffer_b
)
0 Z+ W9 C& t# K, B0 h
{
' h# q, {/ t& R' f' V5 B* v& G
upp_error_count++;
& y; R0 F7 e3 }9 S7 H0 [+ R3 M
}
- _1 ] |! k6 f% f. F5 D! N
}
# E4 F0 p+ S" T9 D. ?
}
0 E! }8 @( ~: B
, D& e6 ~) h" s( S
/* 报告通信结果*/
+ Y1 B* H9 O0 d" `' }! h4 c' s
if(upp_error_count != 0)
- A/ f, s4 ~. N. s7 l8 _' E0 p
UARTprintf( "upp_error_count=%d\n",upp_error_count);
6 J0 m4 c& v1 W h; @2 m: V
else
8 ]) `0 i1 t5 d9 {/ L5 E" n; o
UARTPuts("uPP transfers complete!\n",-2);
; F( v( H; ~# S. F* Z! T
9 K8 Y; ?, `! j! E! m
UARTPuts("Do you want to print all the data?(y/n) ",-2);
2 ^6 b8 T' ~* Y" Z: g' m
UARTGets(ch,2);
$ J t: b8 _) |" b* N
UARTPuts("\n", -2);
- X% C+ `0 c- q0 F! m$ ?6 L N
" C8 |+ W1 C2 H3 v
if(ch[0] == 'y')
2 T, D7 L# r4 K
{
" ~) L; M C8 a
/*打印全部读到的数据*/
- v! P8 x- q: G7 j3 c
for(i=0; i<upp_frame_size; )
. r' W6 @0 J; L! O
{
% e, H, [5 G8 Z
for(j=0; j<5; j++)
% ^ x" Y4 ]+ c6 F
{
7 ~2 n5 r4 T9 `, [9 j
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
! ^4 [4 K( r1 ?; U9 \" V
i++;
\8 P R' J+ d \# x; F
//if(i >= 4096)
' B7 \- @& W1 k& _' t/ U8 _
// break;
& u3 T% W/ \5 C [& l5 |
; y0 o$ M8 R2 P ]5 \
}
2 p3 ]8 T1 e. ^- [1 ?
UARTPuts("\n",-2);
! y$ n% n6 ?$ g3 T% F+ l
}
) s- ], m1 o' j. k- W9 @8 C
}
* X7 L+ V' n! E( ~) }1 F0 q; l
% Y( X. e2 Q* o' q9 u$ U
}
- W( d* Z* f8 m) `
8 H* O) U+ g8 Y* r& A' l2 ~
( D$ ^6 F6 C' `" x' h
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
% x6 O' b# R" d! o, q
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
5 d. a I8 A9 r% ~% f$ y7 n; D
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4