嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
5 M) e6 Q2 E- D+ \: e' m
Void UPP_TASK(Void)
5 R0 r) ^# ]. E% G# [' m/ T
{
# u$ V; W* c. j, B1 n: X
* s4 V6 F9 V9 K$ A2 N* {: U
int i,j,k,target_int_count=2;
3 C: n+ V3 v' m$ X: g/ |
char ch[2];
, |6 g2 h+ B" g8 ]
' }) b# B. g. m& y1 a% {( E4 m
6 w& G8 |; ]3 S0 X" {( D
- C* v _" C" O* G
upp_interrupt_count = 0;
% ~" r# i* ?; K# ~' n* r3 {
upp_error_count = 0;
8 q0 ?: Y4 q; ?
. c; O% `# s2 F% O/ \2 F& y
UARTPuts("\tResetting uPP buffers...\r\n",-2);
! s% x4 w$ N V
// Initialize data buffers
/ H# I- R. ^2 k+ W; i, [+ B- q7 B
for (i = 0; i < upp_frame_size; i++)
0 [# V4 h4 W, h. V: d( r
{
% K! l+ \2 `7 D2 j2 z
upp_buffer_b
=i;
0 N7 C' _5 @) h! ?- C+ f0 d
upp_buffer_a
= 0xDEAD;
1 |1 r5 Z+ }* @" Q- q
}
4 S# V* t e& H# o; h U# @2 E
1 F# G: A) J Q& p8 Z- B2 ^
//for(i=0;i<1024;i++)
7 U2 Y2 S, A( v6 f
// temp
=0;
5 S' B' ^% ^! q9 e
: Y* Q, p3 F! J! m( ]; p
//UPPReset();
- l8 \) H9 Y7 U0 B! Y
/*启动UPP DMA传输*/
$ R- b: b# U( X1 v$ U8 {" L H, [) _% H
UARTPuts("upp_prog_dma_i\n",-2);
- V8 F( v4 k4 ] a
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
& C* [, E' T4 I( w- T! N7 L8 r/ J
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
7 B7 @; l6 d+ F3 r- H
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
4 y9 y, i1 f, i
' r* V, M5 B1 A* V
UARTPuts("upp_prog_dma_i\n",-2);
0 w3 w% `! i# a, l" E! a4 C" z
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
- {6 h0 `) }- T1 j4 q/ X
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
9 }' a6 Q8 G4 |" h' e
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
/ Q. c! X! V$ j- Y: a) [, C3 N
: X8 N8 B1 K6 M- `
/*等待UPP传输完毕*/
: y% @/ z5 U) n b' w& N# ]! L; a& E+ o
//i=0;
1 k# e" f4 }& _* J- q" J
//j=0;
* J( K4 O2 w' ~4 }0 h% E
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
) ~3 [* m$ e* F+ }1 W! i
{
7 ?- F$ Q" n0 `: \' b
/* 测试UPP传输的同时操作普通DDR数据
5 L0 U1 D8 c( r# {
temp
=i;
, R9 D3 `0 ?! }6 ^
i++;
: E3 m1 a" ~$ U: Z6 R# `
if(i==1024)
: |; L, U, R" {8 h9 a
{
4 I! I8 \5 Q. j
i=0;
|* ~/ Y+ C! d1 \
j++;
& S& Q% H% p, Y, `) c, c! f
}
3 `, a) I8 o, `3 \4 {/ |1 V S: L
*/
9 S. d5 f0 [2 K8 g
7 u" D( q# f" a$ P( J
asm(" nop");
' k' [& w$ E$ ?+ j: }# W7 q2 {
- _- ^% P* { R: O. Q6 g
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
# {; Q+ F2 I% {
}
) X* c& h6 F& |
. y3 {9 h" F8 n
/*检查UPP传输的数据是否正确 (loopback modes only)*/
- p: e8 m! r( H
//UARTprintf( "i=%d\n",i);
! |: T5 I, ^) I( E
//UARTprintf( "j=%d\n",j);
* P, e8 x, W. [+ J `( V- D8 J
UARTPuts("Data mismatch in buffers.\n",-2);
# o9 {6 ?' D* e7 l; Y: b
if (upp_interrupt_count == 2 && upp_error_count == 0)
/ j# ~2 } `3 Y( V
{
! @ D: W$ `& v( D. Z+ ]
for (i = 0; i<upp_frame_size; i++)
8 a' E9 K; Z! b/ h: Y
{
& @! x0 R, J' b( |
if (upp_buffer_a
!= upp_buffer_b
)
8 t4 f0 u# @9 D" |* G
{
% h! h, T, e( R @
upp_error_count++;
. `! `9 u1 z2 Z/ M: y
}
) n0 o0 z. W. A! ]5 k1 M8 v. K6 ~
}
+ k, Q* X( W4 S: h2 p9 C( z
}
0 {) Y( A2 ^; p; \8 O6 |: K
9 q* s- v2 R0 i7 {6 F8 E
/* 报告通信结果*/
' f% }2 F5 e- p9 D7 u
if(upp_error_count != 0)
/ C+ c- {" D" B" p% r8 i) T) [
UARTprintf( "upp_error_count=%d\n",upp_error_count);
& S+ q, ~5 n# B6 k0 p4 ^* ?3 R
else
, |! w5 h8 Z z% ]/ \7 F5 f
UARTPuts("uPP transfers complete!\n",-2);
0 Y" { @6 ~! K* c( Y/ I u* a
/ i* \6 T8 m. W$ P& L$ ]" H1 {
UARTPuts("Do you want to print all the data?(y/n) ",-2);
- d) A- X$ F) c5 _1 j
UARTGets(ch,2);
6 { `& T- b- n: l3 d
UARTPuts("\n", -2);
" y$ r" B1 ^+ h
9 J0 E$ b* N) G) ~: E1 c
if(ch[0] == 'y')
: ~/ [5 a1 j# o! W& M
{
. y7 m$ u/ E3 j
/*打印全部读到的数据*/
" ^1 J3 { `- J$ S3 q2 u8 L
for(i=0; i<upp_frame_size; )
& X1 p1 T% ~4 s& N% W' T
{
8 t x9 H/ ]: i$ M. l. E
for(j=0; j<5; j++)
% b5 n% ~1 s6 |' ~$ T
{
1 I; l7 ]5 K3 V* J1 d
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
" G) b6 ]# h9 \ A2 }
i++;
/ y+ s5 l" g/ d+ e, S
//if(i >= 4096)
. d8 r# l% p% H- l( ~$ D7 J
// break;
' h' q/ s; |( I
; e) E w7 e( ?3 _6 b5 _0 Z
}
m; v1 c6 ]3 F1 ]" L1 n) P$ U
UARTPuts("\n",-2);
2 ?8 \8 w" L5 r9 {9 o' H \
}
: x/ c3 {6 ~5 e5 w; P. ~; H
}
5 x( R% C/ W3 k
, a# M; j3 Y& y( D" H
}
* v/ a, i0 q" Q; _, G7 {+ s
3 c1 ?) H3 f. G* C
, Q3 a( t% @& ?) ~4 i: n* K
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
6 i) A* C6 X J' L3 h% t
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
8 s& x2 p0 }4 q) `" g
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4