C6747利用McASP发送中断方式完成音频输入信号的直接输出 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
) R5 Y: T4 k- m8 n0 x; Wmain文件:* ~( z+ @2 l5 K& S) U
interrupt void interrupt4(void)  & j8 h, Z7 C/ H% Y2 Y: |  z
{
9 ^$ N% |$ F0 Z0 c3 }0 g3 B  Uint32 sample;
0 D; w+ y" E7 w" h. N
$ a) y) i: y0 A  sample = input_sample(); // read L + R samples from ADC% ~7 G5 [/ t5 R5 M! d" o
  output_sample(sample);   // write L + R samples to DAC " n9 B3 e& C! T. x
  return;
8 |# P3 i1 u9 l* [" S8 x7 m; j}8 v# w6 L# c+ P/ s- T0 Y( @
7 N4 Q& ?( x  Y
int main( void )  H4 W$ U! u' q. a7 G- C: ]0 W
{" y; q3 O, M6 a' L

& i6 Q& B" b+ `& h1 M8 E    /* Initialize BSL */
  L1 `5 f" W3 }1 r7 t0 i0 H8 h" l1 u    EVMC6747_init( );
0 r. A5 D8 V# m        /* Call evmc6747_intr function *// t% j5 u* K/ j: N$ x$ v' V5 j
    aic3106_init( );
3 A  G# t& [2 g        while(1);
! \( c& q, }% [- |; j5 S/ @/ ]}
) S; |  n1 X$ J9 \0 J* i8 |1 j# x5 K4 C6 |  M6 Z& M
* x' n" n/ g- ^( m4 o9 K7 j8 I" L
aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题) O5 c1 J* j3 a* y
/* Initialize MCASP1 */5 m: X2 b! W: F* ~. S; d$ t- s
    mcasp = &MCASP_MODULE_1;
6 }7 e5 H; V; ?0 S( Z    mcasp->regs->GBLCTL  = 0;       // Reset- H' p5 E; \* J; b1 o, Z
    mcasp->regs->RGBLCTL = 0;       // Reset RX
4 `7 O7 Z9 ?, O+ H7 n- W1 b    mcasp->regs->XGBLCTL = 0;       // Reset TX
  D- q1 a( U; A3 a+ j: Z  ]! ^    mcasp->regs->PWRDEMU = 1;       // Free-running) K' s+ ]8 j4 u2 b# ]# g6 i
   // configure McASP0 receive registers
6 D) v- K0 ~3 {3 F3 \" g* Y4 q  K: M, F6 x    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
0 p" N4 O% F5 g7 s5 l+ ~& [6 i    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
, y2 X  j& B8 n! G. K    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word
( S' }8 E. D2 @6 i5 W& C    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
. F9 x7 y5 v/ @$ U    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)' s+ E: t+ _9 K3 m/ j$ |
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1& G; J( {' l; W1 _9 b! ]8 X' y
    mcasp->regs->RINTCTL    = 0x00000000; // Not used, M! b# Q, `4 U; U) `& g/ `. }
    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* H8 T9 p5 ~- R6 p7 k3 I

) l) ^* u( b* `* }3 T* i" ~    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used" {5 _6 W& W0 ?  z( V& {
    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus, Z# g  r0 W% x* j# C. G% O/ p* r( X
    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
% ], g( T; l% [8 N* ?- N    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-164 _& l1 j* @8 M7 g. K5 Q
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
( E  B" W( ~4 C; u* x1 J! T+ V    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1
& a. v+ i5 w( o2 z( v/ N4 u4 H    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
, a" W+ L! z  w: v1 y4 Q    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256- o- p+ m. Q/ k/ R5 t2 ~* C

3 z8 f0 S6 G' J. \+ {8 {1 E, `2 O    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN% o6 T7 X9 a6 Y
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT, `; V$ x. N. r* ~1 R0 J1 j
    mcasp->regs->PFUNC      = 0;          // All MCASPs5 \  `0 B! K# [7 b8 w  ^
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1
- }7 c4 k/ v; e7 B' n, Q2 \/ n! ?5 B* X
    mcasp->regs->DITCTL     = 0x00000000; // Not used
  T- ]- M9 |9 @0 J# X8 T    mcasp->regs->DLBCTL     = 0x00000000; // Not used- l, s: J1 n# s& N; Z
    mcasp->regs->AMUTE      = 0x00000000; // Not used
- V  ~) }3 S+ e, c
! j/ Y0 A; K& q0 t; ^! f/* Starting sections of the McASP*/
% \2 T: f, M% h0 S  q$ [. p    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
: j* v' u$ L2 V5 w' \    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  3 [6 W, F# T5 o+ o/ ~. I
    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; 9 k/ k( m5 b) g- }
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );( e; R! x8 @/ }7 D
3 R3 I0 p# n# M% M# c' y% T
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON;
, y: `3 g. c8 o/ a+ w& \* I+ X, t, z    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );
% `7 Y, x" f' h8 }$ M# r! E    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON; 7 ^! K" Z) e9 H! |+ e) Z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
5 V1 i8 n# U/ X% F3 O
4 N2 w! U2 X# U2 z/ i    mcasp->regs->XSTAT = 0x0000ffff; , e4 r& C. }. n  a# L2 {
    mcasp->regs->RSTAT = 0x0000ffff; 8 E8 t: _- [* w8 |6 K+ z

; ~' H5 }3 Q1 a    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
: `; c- a$ d$ z1 b    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
# e5 q7 y& d1 ]# d* M  Q    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
: K. _3 Q1 ]4 t0 A    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );
* i$ y+ G& W8 h* M
% m1 c) c4 {  d3 M5 `5 ~' f    /* Write a 0, so that no underrun occurs after releasing the state machine */
! @8 w: R8 v3 f& B! H0 h    mcasp->regs->XBUF5 = 0;- O6 D  r! g/ m2 [9 M1 U
    mcasp->regs->RBUF0 = 0;
  D3 b- X7 ?2 Z& E8 p# ?6 z" b
    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON;
8 B6 u; J# t. K+ U    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
( d* V3 s9 u6 H3 H  M& H$ X9 u" I    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON; $ A6 r. S- a- ]% J& a! F& l
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );  ]3 C/ F: d* a
: K% t! K- L" Q' ?* M6 k
    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;
- u2 ?) T+ o& q8 L+ |' s: C    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );0 s, J8 Q- ^; G3 R  K* P, L
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
9 ]/ b; R, x) j5 i4 w2 J# _% f; e    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );) G1 D% I/ M0 [- q+ n+ h& x
  ?( f( l8 X4 r, u; l% O, [
    CSR = 0x0000;
( g- r0 _. C$ `- b2 |' f( y/ d    INTC_INTMUX1 = 0x3d;& w. j6 o6 v9 y; [( l0 `9 s
    ISTP = (unsigned int)vectors;
& x% i; B8 S& u) |4 ?9 ]; F    ICR = 0xFFF0;  # K9 r3 w* g& R# q
    IER |= 0x12;  1 c% I4 x& S; q+ x' Q. A
    CSR |= 0x01;  
, Y5 b- `( E5 ^  u7 t+ F
, z* u4 s( J  L5 p) h+ \$ z; E6 v* t+ A& |; M# q
% {5 Z3 r# }3 b
还有就是两个输入输出函数:
: [6 {& S9 o# O; u4 K& E: s% gvoid output_sample(Int32 out_data)2 V4 r9 R, ~; U3 }) W
{( ~0 {# q' H) Z( |
  AIC31_data.uint = out_data;  
7 C% H# R* Y" H' ?* Y" b  MCASP1_XBUF5_32BIT = AIC31_data.uint;
8 t1 ]# C3 H7 u  [" M4 i: U}; t: G& |# w, ^8 i' Q1 V4 c
, F0 M+ J9 ^0 H3 m
Int32 input_sample(void)
+ \1 A; }9 W1 _" d7 q8 ^: k5 G  E{  
) o% f% q6 l/ a! n  Y/ V  AIC31_data.uint = MCASP1_RBUF0_32BIT;
, I3 a6 [) l) }9 T9 r7 y7 Y& [2 c# l( A! N  return (AIC31_data.uint);
4 E) [8 o( T0 W/ k}4 m- E$ a  c9 v* o, v' x3 C
3 I9 _$ H/ s7 D0 `1 B
分享到:  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, 2026-1-22 23:19 , Processed in 0.040514 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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