C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 5744|回复: 1
打印 上一主题 下一主题

C6747利用McASP发送中断方式完成音频输入信号的直接输出

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
2 G5 s( \( ?% t4 h+ nmain文件:" V& h; |8 |5 s0 k3 I; U+ @) {+ f
interrupt void interrupt4(void)  
3 c1 `5 K0 C) k{0 l9 O5 P* Z, D$ I% ^/ L5 k$ C7 [
  Uint32 sample;
1 N( A! b7 Y. ~" r) Q! D
. a# q; v- J6 w7 u4 P! X( o1 f  sample = input_sample(); // read L + R samples from ADC& A1 m, F" k7 T7 a3 J5 q; K# n! ^
  output_sample(sample);   // write L + R samples to DAC
7 j6 Z" _/ ^8 i& A/ m  return;
: A4 n4 f$ B' w( i}
: `$ @$ G1 e( H- W& \) B- F
" t# `0 o7 o* u+ h# y& [- ]int main( void )
2 j8 u$ @! u. K- {% t2 x7 h{0 n' R2 N9 o4 \/ O$ B+ r
/ S' V9 M: ~# F5 K9 h1 m# h/ Y% |
    /* Initialize BSL *// p  X8 m; f) u& U  {* O
    EVMC6747_init( );
! C0 }' C  }4 ^2 A& c  C# n- G$ L7 c        /* Call evmc6747_intr function */$ D& C  U* f* s, l& I& ^3 {
    aic3106_init( );
# v, K7 z8 L: _        while(1);
7 ~5 N- F" D0 R. U8 y3 l% a+ r}
2 {; R+ ^' f! q6 ]( N( T7 f# z8 Y8 @- u; m( k6 c6 s& b
- D$ @3 y9 r( V5 T6 |7 {5 m
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题/ g" @: h: W1 s  R0 x
/* Initialize MCASP1 */  ], p* F5 p" N/ a
    mcasp = &MCASP_MODULE_1;
4 D! ~, D& m1 |    mcasp->regs->GBLCTL  = 0;       // Reset0 U6 V; a! M+ i  r
    mcasp->regs->RGBLCTL = 0;       // Reset RX! A7 N- I2 M! Q: {
    mcasp->regs->XGBLCTL = 0;       // Reset TX7 h$ m( g# q" B5 e) t
    mcasp->regs->PWRDEMU = 1;       // Free-running. c+ }& i( g+ n5 D2 a3 z
   // configure McASP0 receive registers
/ q- V$ ^& z; z: O; o  w    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used8 ?! i3 U9 i! v. c2 S# x
    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus9 S6 J8 x1 {- \+ T& Z
    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
7 j9 ^0 A) W9 Y& n3 s9 H    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
. ~4 s! _1 a! e1 }    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)
7 L+ ]: N7 Y9 q5 O    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
6 r& B7 R3 M* j8 n" y    mcasp->regs->RINTCTL    = 0x00000000; // Not used& u; k$ x+ O8 ?* q3 z
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256% @4 H7 h- x8 u- q+ Y. q
, g8 L: u  M$ M  e4 `
    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
) k7 E% @4 c1 ^! a& r; u    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 H) k  O% e0 T+ g8 d& a    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
, C! T0 ?+ v) f: {& S6 }3 q% g    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16
& G2 a- C- F6 G6 f9 v% ?    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
/ F! R" h7 K* T2 \. _( K    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1# {- F1 F2 |  j
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
. z! y  M# U% L    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256! \, h/ H# w9 u

8 r& o- a3 `8 d! t5 U! k    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN
3 K' Y# \' O! v" H  M3 p& u6 y: U    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT4 E( z! H4 `1 O! l3 Z& ^( _
    mcasp->regs->PFUNC      = 0;          // All MCASPs( {% t/ A. r. e9 G" h* f' B& h% Y
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1* r! k4 C/ A  Q8 m  T* i, R

0 i& R9 c' U7 m( F5 y7 D    mcasp->regs->DITCTL     = 0x00000000; // Not used
. M( A5 F. b. A$ c, U2 ^: H    mcasp->regs->DLBCTL     = 0x00000000; // Not used
; o9 p) Y; r1 R! c4 R- M    mcasp->regs->AMUTE      = 0x00000000; // Not used% @- x2 W  V3 F. P

4 j' w0 p& `) U8 [. r: E/* Starting sections of the McASP*/
! a/ b* g+ H/ T1 U; E0 c    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
+ q  G! H. L5 G2 M3 @    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  ( \1 p! d9 J) @& Y& H* j
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON;
: @  a: b* ?6 P, i4 B    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );5 e) S1 {/ [' p, y% x; \$ ~# o( T

9 E2 Y% t6 W$ E( ?$ l4 u    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ) |/ d2 M( J9 K# ^) Z
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );( w& i2 y& h. _1 Q+ o2 f& j; O/ g2 ?  @2 P
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
, @$ A. d, E- Q* M0 o; D    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );% N5 I$ }0 O" d6 d8 f
* b6 ]" m3 _; X' j& b; m. @
    mcasp->regs->XSTAT = 0x0000ffff;
( r+ ~. K0 F5 J    mcasp->regs->RSTAT = 0x0000ffff;
; x6 h) g) _) q% f) C) P; `) _8 q: W' D8 j
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
, T, q- C" t, h5 Y5 ~$ u    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );$ d7 X, l: z' }2 T# J
    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
& I& Y& S3 G. z$ M/ q5 Y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );+ i3 }. S* r' ~" R1 _) w0 v6 D- o

) M, v4 r. y' p& x1 z    /* Write a 0, so that no underrun occurs after releasing the state machine */8 o( B9 E& }2 n( i0 W, S
    mcasp->regs->XBUF5 = 0;2 P  ~0 Q' Y! H8 H
    mcasp->regs->RBUF0 = 0;
0 Z1 N6 J8 ?& Q- I6 X, ~
1 w1 z+ o3 q+ n6 ^6 l    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; # z" W( Y( m) V2 p8 H2 w
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
8 A* P7 k" l7 |+ @    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; # g! |$ k7 u  N; l/ A
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );
, d/ p; Q) F' ?- l! b. }
* a( P& p- k; Z3 b  K" f    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON; 1 Q9 |- S2 V0 K4 \$ Z+ u
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );
. q) f. |$ I2 L: E: e    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON; 5 N( w; D; g. W+ l+ g" [/ E8 m
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );4 |6 [/ Z  [1 r
8 @$ y: J+ }% b' f: @
    CSR = 0x0000;8 @- x& z& V+ g1 y; s
    INTC_INTMUX1 = 0x3d;1 Y+ Z! t4 b% C, N) C
    ISTP = (unsigned int)vectors;3 |( S/ }: ^4 t' ]" M* f
    ICR = 0xFFF0;    n! o' R/ t/ S/ g2 r! S6 S  ~( s
    IER |= 0x12;  ! E$ K' t+ y+ c5 u1 ]6 o
    CSR |= 0x01;  6 t$ N/ A5 E+ Q  w. x! Q

# S& p3 y8 F# Q6 u7 T! o
7 u- Q8 Q! u5 c* S. M- T2 I! P# O% z
还有就是两个输入输出函数:9 a4 R5 @' D! k" w% u6 q" _1 t
void output_sample(Int32 out_data)2 ?- r2 ]9 R% Q
{
4 q% o4 D" }! _* @5 V7 u$ u  AIC31_data.uint = out_data;  ; T0 ?$ m: F. x
  MCASP1_XBUF5_32BIT = AIC31_data.uint;/ W+ l% Q7 A+ s5 ~0 L
}+ y: Z" C6 I7 A

& g% a- K1 ~" o" l9 LInt32 input_sample(void)$ E3 \. G# J5 n" t( z# e$ q4 Y
{  3 B6 K. p  r  S) N
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
7 {. `5 R  M+ y. D  y; x  y  return (AIC31_data.uint);$ J6 N- _  w% i$ g# r- e% g, A- x" |9 G
}. M5 l+ ]  I# u$ L5 B  ^7 ]% y" @' f

% M/ p/ U. p2 W7 u& B. d: S  z
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

3

主题

852

帖子

3538

积分

创龙

Rank: 8Rank: 8

积分
3538
沙发
发表于 2016-3-16 11:55:59 | 只看该作者
可以参看创龙提供的例程:AUDIO_LINE_OUT_INTR——Line Out 音频输出(中断方式)
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2025-12-7 15:01 , Processed in 0.038246 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表