嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
- g2 ] h; U. H/ p% z7 u
Void UPP_TASK(Void)
/ j! K- b7 u* R+ E) B
{
: H0 q, m3 i; S
2 P6 t- G9 z# J! k2 h- `9 [; e
int i,j,k,target_int_count=2;
# h Y4 F! |& w7 S4 m
char ch[2];
5 H3 C: p' q! _* `/ a# ]
+ K$ m& T, y/ S) l* X; `
" ]/ f% a+ _" ~) F( {
7 y& z# \/ _' U6 c F& k
upp_interrupt_count = 0;
! P) Y7 w0 h7 \/ ?, s
upp_error_count = 0;
8 ]# u# w" z7 F L
* D7 b$ H! O9 }3 Y
UARTPuts("\tResetting uPP buffers...\r\n",-2);
C" A: w+ T# e& o$ [" Z
// Initialize data buffers
5 }! x" ?; J& k- N
for (i = 0; i < upp_frame_size; i++)
% K: w2 W. W/ _; j e5 u
{
3 P, U; g$ U5 A3 W
upp_buffer_b
=i;
& W0 p: g, k z
upp_buffer_a
= 0xDEAD;
+ C4 v. H! E$ C$ c, L: C
}
4 F1 Q. Q+ \1 Z% O( \3 B8 M6 t
$ o, K# \# J7 c1 T- ^( @( c3 ^
//for(i=0;i<1024;i++)
, w3 L- g1 e" h4 \5 z9 [( P
// temp
=0;
I7 u3 i' a) G) R
* n9 `& ` N- V" T& G& r
//UPPReset();
# k; R8 N: m8 ?- E" x2 K/ L
/*启动UPP DMA传输*/
% p. X" [% X) t; @3 V7 ]3 V
UARTPuts("upp_prog_dma_i\n",-2);
}7 n' f& {; W" l3 f% ^" u
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
( `2 {7 H( V% v. `' A7 o$ g
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
: p( s2 U3 i/ j- w1 l* [! L5 }
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
& `/ U* _8 l" [' w/ B& [: Z
" x5 n" z: p) q& ]; e5 t
UARTPuts("upp_prog_dma_i\n",-2);
: O) R: N0 ^6 l8 f- x/ z! l
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
; V5 m( h% e6 ~- f
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
8 Y' Q4 |9 E+ q) K$ P+ H; T& ?4 X* \
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
* e0 `( Q- K/ {, h. @
4 n3 Z+ V# f# s% {$ B# l% \
/*等待UPP传输完毕*/
* k5 F( |/ B! y; T
//i=0;
! a9 b! R4 N' b% r4 A; H8 _7 I( l
//j=0;
( E* b: W0 @2 H, L& u4 f
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
9 u: i2 }0 ]* ]* R T. f0 D
{
1 x) V' a+ r4 ?1 g- ]
/* 测试UPP传输的同时操作普通DDR数据
$ \: H- _8 ^; {- m
temp
=i;
) \, V& b4 g; W2 H8 ^" E' J# j/ V1 H2 n
i++;
# K8 N1 @) R. U9 z; H6 U
if(i==1024)
9 \7 e, I: {6 k" Y$ h
{
& w& d, \/ t: }
i=0;
+ H% H7 f" S4 J% [* p* ]( q
j++;
) c& a3 P+ z. n$ @5 A
}
# H5 R- v/ @3 [: }
*/
3 v8 t8 U* {% P- @% ^9 V' e& `
8 A z! y8 J# e- I3 H! O
asm(" nop");
" s8 K L6 L" @3 L* o) v" m
7 o" A1 v. ?1 w( Q1 `
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
. _" x3 G' {- X7 ?
}
; c! x1 H% w0 I( K9 L
9 T; ]% I9 v6 b% }
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 T. ^0 z: {( O! y. ]
//UARTprintf( "i=%d\n",i);
n& |3 N/ H, C* ^+ S
//UARTprintf( "j=%d\n",j);
w/ L8 W% f+ T3 L+ c% j
UARTPuts("Data mismatch in buffers.\n",-2);
! {8 C; ~9 }+ g( o' P* c8 L
if (upp_interrupt_count == 2 && upp_error_count == 0)
u5 a' H: i. Z# T# T: b
{
: W; u6 ?, U: E5 u
for (i = 0; i<upp_frame_size; i++)
8 m! T! ? I0 W' c, F9 v
{
5 Z: p5 k: x5 x
if (upp_buffer_a
!= upp_buffer_b
)
+ V# E% f6 D1 x9 D8 m; A
{
0 {1 t0 }) A3 b
upp_error_count++;
4 y5 J; d# ^+ W2 I, ]0 \
}
( _9 {/ A0 L% L
}
& q! \0 b$ j8 b! C. g3 K
}
* x3 u t& N: K/ l6 B8 z. A: V
; `5 U, t% f. V+ n& V
/* 报告通信结果*/
8 L# Y1 Z+ T% J1 f6 A9 Z7 q) Q
if(upp_error_count != 0)
% B( n X7 h! b( B
UARTprintf( "upp_error_count=%d\n",upp_error_count);
, q/ X' D% L# p4 d! n: |$ |5 `
else
) j7 M. F& S V
UARTPuts("uPP transfers complete!\n",-2);
4 U4 y( |7 `% I. H$ _
( H# A* r" P! p% i; j8 {# Q7 ^5 J
UARTPuts("Do you want to print all the data?(y/n) ",-2);
0 |; z5 ]8 A S# A4 _7 D$ L( S
UARTGets(ch,2);
* P1 `; R1 R9 ^
UARTPuts("\n", -2);
5 E' [" \. _. U4 q9 e% J) E
0 P& z" I2 M0 s1 X5 G
if(ch[0] == 'y')
# h" W9 ~% k: T3 A9 D, L' T
{
6 o2 X* T$ M* t) z* d0 e5 @& ?6 P
/*打印全部读到的数据*/
+ A( l# s1 Y9 j9 ]
for(i=0; i<upp_frame_size; )
, P* N+ G9 X9 T5 U" p, w2 o
{
- W, n; {) M, D7 e; H
for(j=0; j<5; j++)
$ s3 `* E5 m5 V$ a/ J S
{
( Y$ c! \( ~- o
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
: z! P8 {# l: e
i++;
0 }: }4 l- k% v5 [& H x9 q1 e
//if(i >= 4096)
+ `1 |1 t% K7 N; U* G1 `4 c/ c
// break;
+ l/ @7 w( [- C+ y( x2 ?# x. m
/ W" K' F7 m" Q, J
}
& L7 o$ m" M; {! m) L
UARTPuts("\n",-2);
# g' M7 B# `- u" m8 ~
}
5 M0 b& L/ X7 e- _' w
}
4 C. V, M5 P# O [
) }) ]; t1 L' V8 N- q+ f
}
/ \7 U2 _: ^% a0 C+ c9 w
& O9 L5 A4 t3 O2 J
1 d# `1 l& ~7 o/ N0 P4 z
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
( ]& W+ q0 u# C
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
) U% d- V( T0 N
欢迎光临 嵌入式开发者社区 (https://www.51ele.net/)
Powered by Discuz! X3.4