嵌入式开发者社区
标题:
upp问题,在SYSBIOS下的应用问题
[打印本页]
作者:
tulipyyf
时间:
2014-12-22 14:35
标题:
upp问题,在SYSBIOS下的应用问题
下面的任务,只能在第一次执行UPP时成功,后面的均不成功,请创龙工程师看看为什么?
' @" ^8 x) V/ @5 P2 G
Void UPP_TASK(Void)
6 D- Z+ W- F! ~5 l$ q: Y! ~, x
{
( o) X" U. K' J _
6 M& J& X9 y) Q4 {# `6 R8 |! w; s
int i,j,k,target_int_count=2;
, v# \# z; `( W( R0 S/ ?& B
char ch[2];
! K+ Q3 |) _. O" {8 V; |$ n
6 ]0 h$ M1 W9 A1 \, Y
1 X! ^, F% Q& H* O" G. ^
8 R0 R) {1 z* r- K$ N
upp_interrupt_count = 0;
- _7 o+ ]* S; |# I1 e3 X Z9 {; M
upp_error_count = 0;
% C4 p% H1 M8 i% p, V
+ M1 y4 D; q( J0 h4 @4 Y: H
UARTPuts("\tResetting uPP buffers...\r\n",-2);
; f7 R" a, O6 E; Z7 ]
// Initialize data buffers
2 l1 t3 x2 v4 @
for (i = 0; i < upp_frame_size; i++)
' R! Y- a% I! l
{
`) m% H% v! W# B6 B ^4 G
upp_buffer_b
=i;
& D# p! | [% N, Q3 H* i2 u
upp_buffer_a
= 0xDEAD;
- L8 h. \% K4 y1 ?
}
3 j- e" h7 [8 Y' L( l) b: v
& H& @: b* m" k$ ^+ m
//for(i=0;i<1024;i++)
( A, [* n; x z
// temp
=0;
S+ h$ g1 A) S, j
( a" b' n/ }$ {, b4 {, \$ Z
//UPPReset();
, p$ D/ v( R) \; H
/*启动UPP DMA传输*/
2 h2 Y3 Z2 [% z3 V
UARTPuts("upp_prog_dma_i\n",-2);
a: t; i* \* |0 i9 d
upp_reg_hdl->UPID0 = (Uint32)upp_buffer_a;
% {3 |1 h' T/ ~6 \8 r" b; _- R
upp_reg_hdl->UPID1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
3 G) T5 h; A' L! i2 a
upp_reg_hdl->UPID2 = (Uint32)upp_line_offset*sizeof(Int16);
( \4 g( L7 O: F# C
( y( o/ e7 J }# k1 x) Q- m
UARTPuts("upp_prog_dma_i\n",-2);
! f1 z7 s. [4 Q6 V
upp_reg_hdl->UPQD0 = (Uint32)upp_buffer_b;
: @4 {- C0 k3 _
upp_reg_hdl->UPQD1 = ((Uint32)upp_line_count << 16) | (Uint32)upp_line_size*sizeof(Int16);
" `6 M* ?9 _+ Q8 b8 L! V0 S/ v
upp_reg_hdl->UPQD2 = (Uint32)upp_line_offset*sizeof(Int16);
- s# w& I4 \1 p/ [
9 v. V0 H) h% l; d. K% X! u
/*等待UPP传输完毕*/
9 R5 K7 b' N+ e6 R/ P8 M7 I* N
//i=0;
; v3 \ a* ? s* N8 l6 ~ J
//j=0;
4 W; |* o7 v+ z3 W' r
while (upp_interrupt_count < target_int_count && upp_error_count == 0)
j* L! `. S5 S
{
, G% c9 p- P# c, I8 J, G4 o, r$ [
/* 测试UPP传输的同时操作普通DDR数据
2 Y; Z3 u- K2 F# Z( `' x+ C6 G
temp
=i;
4 a) U9 p* y# k7 r& R3 y0 Y
i++;
( |/ X, [$ @5 W8 \- b* c" X
if(i==1024)
2 W. F( V. q9 Z/ ~; x8 T
{
. l+ M- T: V; O, S) U& z! M
i=0;
, {7 F) f% O* M9 }
j++;
+ e4 V6 E, c+ c L1 q
}
" _0 W, q+ S. @1 E2 K/ W
*/
0 _. _2 p: w) u {7 b+ V. `" T+ c
, j v& j$ x9 i" \. U! @8 h
asm(" nop");
, F; E$ Y6 {! f# k% g
, E0 C5 U! f2 h2 n. x
//UARTprintf( "upp_interrupt_count=%d\n",upp_interrupt_count);
/ [5 Y9 r7 d4 W/ `& O" o0 N
}
7 A1 Y4 |4 s. i: c. s
( Q* f7 ~2 ?- O, H3 X4 q% } G2 x
/*检查UPP传输的数据是否正确 (loopback modes only)*/
5 f, R" M0 o$ _4 i9 k5 K
//UARTprintf( "i=%d\n",i);
# m8 M6 y8 ?+ g
//UARTprintf( "j=%d\n",j);
% s% s1 j: o- X: b6 X6 E: o/ n
UARTPuts("Data mismatch in buffers.\n",-2);
. Z9 C0 U$ p# o; B
if (upp_interrupt_count == 2 && upp_error_count == 0)
& m- c3 I, A. P4 Z% h
{
0 ^" S& d, q) {" h- n. Y# u* t- b
for (i = 0; i<upp_frame_size; i++)
* U% r! f% b9 K1 Y, L; k) X
{
1 ~! X* _5 A$ L. Y
if (upp_buffer_a
!= upp_buffer_b
)
% @5 f! F0 }6 f: u- a7 T
{
% G& m' y. \3 @9 D$ A5 k, {6 u
upp_error_count++;
0 W/ N. [9 n2 t u+ k& N' c; J
}
4 W+ X! Z7 x: a
}
$ a7 X% B9 j5 B l; E- H
}
) s2 j. P; ^, a& i
" ~6 n$ m$ ~! ~" \' h; u
/* 报告通信结果*/
+ N) w) B7 O' Y- E7 Y# Z
if(upp_error_count != 0)
- h/ _' Q% c( ^! o% N: N
UARTprintf( "upp_error_count=%d\n",upp_error_count);
# D W5 M- `2 R# _
else
( K8 L- w8 ]: i! c6 A N# q
UARTPuts("uPP transfers complete!\n",-2);
' O: r( g, ^; M0 t8 \8 x4 L" N) n
4 A% @ t9 `: t' ?" g! ^
UARTPuts("Do you want to print all the data?(y/n) ",-2);
* i0 r1 O. t" J8 X
UARTGets(ch,2);
! x: ]; T# f/ y1 T @' H
UARTPuts("\n", -2);
" r: K/ r/ i+ |( k9 ^, j
$ C( T0 |* `% ?' @
if(ch[0] == 'y')
0 _* X) w/ L- Y1 [( ~4 c& h
{
" y y D# n7 J1 B; S2 W: M
/*打印全部读到的数据*/
# u f7 x* F+ w+ P
for(i=0; i<upp_frame_size; )
0 P: p. G0 I% T
{
L! ?. I5 M2 C7 e0 \
for(j=0; j<5; j++)
- _! S$ ~) v8 c8 y- W
{
5 `' S* M9 h) G+ N' g
UARTprintf("upp_buffer_a[%d]=%d ",i,upp_buffer_a
);
2 Z$ i) ?4 K( P+ x Y& \% ]' K
i++;
" A: O m" r: \% _4 Y9 w
//if(i >= 4096)
8 D2 m I" l- P3 a. s m
// break;
( ~) G% f/ v, n$ v# n1 B# ^2 L% a
/ G7 S( t8 L& J3 X4 v' g
}
2 y9 @% P3 C9 N
UARTPuts("\n",-2);
7 P+ G* m1 n, C4 i5 @! a5 @) T& ^
}
% O" |/ R% y/ H2 G# {
}
6 P+ z$ Z8 A7 B G! U$ k7 Y' j
0 m+ H6 ~! X% q1 H0 D4 _
}
5 c3 _3 `& O! h3 C, _& D* e$ P* l% |
$ Q& a1 a1 e# E( h4 y
" D, [" w7 k1 D {3 I) x! A
作者:
tulipyyf
时间:
2014-12-22 16:08
追加说明:任务是空闲任务,因此没有做循环。
8 z- ^& n R% F+ W( W
作者:
Lewis
时间:
2014-12-24 18:06
多次执行是没问题的,最好不要用空闲任务,优先级太低。
1 u; f7 y K! n& g& p5 y
欢迎光临 嵌入式开发者社区 (https://51ele.net/)
Powered by Discuz! X3.4