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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

1

主题

1

帖子

23

积分

新手上路

Rank: 1

积分
23
跳转到指定楼层
楼主
发表于 2016-3-15 16:07:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C6747和C6748感觉差不多,我想实现McASP发送中断方式控制音频信号,在轮询的例程基础上改的,轮询程序可以实现,但是中断一直实现不了,也找不到错误,求大神帮忙!下边是主要程序:
* `5 }/ ?1 x# Mmain文件:
& ]1 n3 i9 t8 U% @& v0 O1 |interrupt void interrupt4(void)  6 A" y9 G) {( _$ X
{
% E. ^' U( o, c  Uint32 sample;
- E+ D, m& u  F2 b' G. Q8 \2 O3 h0 f* G/ J# d5 |; x( r& @2 |* u, v
  sample = input_sample(); // read L + R samples from ADC2 g" F! _1 k. E7 q& i# U3 u
  output_sample(sample);   // write L + R samples to DAC
$ [' ^4 Y/ P. v& V: ]4 U( Z  return;; p7 }0 q' s# L( a: U" d& G8 v
}$ j/ x: m5 l2 K7 d* k

0 S4 o4 A) L4 w: t6 ^int main( void )& w3 R5 r5 A: B9 a8 ^' B( K$ i6 v  W! s; I
{' ~8 I4 Y$ g* W

6 \" p5 o2 y6 ?8 [( ~    /* Initialize BSL */: a; @  |0 ^9 P+ C/ U
    EVMC6747_init( );3 P2 _, r- N/ Z3 E1 M
        /* Call evmc6747_intr function */
/ O5 F0 U. M1 @    aic3106_init( );- R2 \# C5 y' p; |' Y( \$ T
        while(1);& m4 C6 u# V) K. m  u" f
}; P; `6 v/ t5 A; p; U2 X& m/ m1 z0 t
0 M. [3 i- ]) M3 i

: n3 t$ w/ h) K  J2 h" H( G- ?* `aic3106_init文件的一部分,McASP配置部分,采用内部时钟,I2S方式,同步传输。音频芯片的配置应该没问题
! @" m* g( h8 N" m9 ~/* Initialize MCASP1 */
# w9 A2 Y" ?7 J5 ~, z3 t$ J9 p    mcasp = &MCASP_MODULE_1;
! Z5 d/ `/ r2 ]1 A1 `, h    mcasp->regs->GBLCTL  = 0;       // Reset5 U# u  v3 E" f4 y0 V5 P! p
    mcasp->regs->RGBLCTL = 0;       // Reset RX8 G* L1 K4 `& x0 d. x2 i
    mcasp->regs->XGBLCTL = 0;       // Reset TX& p6 T" y, ]6 x3 u
    mcasp->regs->PWRDEMU = 1;       // Free-running, V5 X: h" N- ^2 T* m/ Y; u
   // configure McASP0 receive registers
; p6 i* {' p2 s: R, ?    mcasp->regs->RMASK      = 0xFFFFFFFF; // No padding used
! i7 x0 V$ @' O# b1 o, o    mcasp->regs->RFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
3 L+ O* d, A. i$ D4 V/ x  n    mcasp->regs->AFSRCTL    = 0x00000112; // 2TDM, 1bit Falling, External FS, word4 `0 @1 @4 t0 M& W; ~
    mcasp->regs->ACLKRCTL   = 0x000000AF; // Rising INTERNAL CLK,(from tx side)
, J( \, _! Z0 A    mcasp->regs->AHCLKRCTL  = 0x00000000; // INT CLK (from tx side)  `; t* m2 [. f7 {' q) U4 m, ]
    mcasp->regs->RTDM       = 0x00000003; // Slots 0,1
  W/ O2 d/ j1 o    mcasp->regs->RINTCTL    = 0x00000000; // Not used
3 w4 C. H' w  J# Z5 `9 v    mcasp->regs->RCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256* L8 ]3 I% q" s% c) [2 b

2 _' H$ H+ [9 f% x! e6 q    mcasp->regs->XMASK      = 0xFFFFFFFF; // No padding used
3 R: m0 s* A* h+ i) e5 T    mcasp->regs->XFMT       = 0x00018078; // MSB 16bit, 0-delay, no pad, CFGBus
4 I7 |; j9 T4 J* V3 B+ e1 F    mcasp->regs->AFSXCTL    = 0x00000112; // 2TDM, 1bit Rising edge INTERNAL FS, word
2 E9 t! p5 T7 d3 N' K0 ?0 b, L! n$ }    mcasp->regs->ACLKXCTL   = 0x000000AF; // ASYNC, Rising INTERNAL CLK, div-by-16: q, u1 s# R0 L
    mcasp->regs->AHCLKXCTL  = 0x00000000; // EXT CLK
. t/ M& A& K% {    mcasp->regs->XTDM       = 0x00000003; // Slots 0,1, b. D) k7 f5 }
    mcasp->regs->XINTCTL    = 0x00000020; // interrupt on transmit
+ q, `  \. z9 n+ q2 Y7 R    mcasp->regs->XCLKCHK    = 0x00FF0008; // 255-MAX 0-MIN, div-by-256" s; ]7 f/ t6 Z7 `& s, |* i
5 h, z& I7 D' M9 R# T3 j
    mcasp->regs->SRCTL5     = 0x000D;     // MCASP1.AXR1[5] --> DIN- `- z, l  I; a% N* E
    mcasp->regs->SRCTL0     = 0x000E;     // MCASP1.AXR1[0] <-- DOUT( x* ^0 f3 c4 |! Y: B- ~8 @. ]0 E
    mcasp->regs->PFUNC      = 0;          // All MCASPs+ [5 t/ T+ ?, y) L2 l- P
    mcasp->regs->PDIR       = 0x14000020; // All inputs except AXR0[5], ACLKX1, AFSX1, F& C+ a- ~1 G( ~8 g8 G9 q3 G

# `! Z, p0 M# `4 k    mcasp->regs->DITCTL     = 0x00000000; // Not used
6 t/ P) L) F# `& D    mcasp->regs->DLBCTL     = 0x00000000; // Not used# i! A1 o3 ^# t, q
    mcasp->regs->AMUTE      = 0x00000000; // Not used
& @4 A2 y1 K9 Q; d& l% w8 K
  l$ H0 h9 ]* L/* Starting sections of the McASP*/8 Y% q9 p- {9 t) z9 X
    mcasp->regs->XGBLCTL |= GBLCTL_XHCLKRST_ON;
% ]7 S3 L9 S$ ^; f2 N    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XHCLKRST_ON ) != GBLCTL_XHCLKRST_ON );  
# m9 b" B* F3 {3 U+ v    mcasp->regs->RGBLCTL |= GBLCTL_RHCLKRST_ON; # \; J: v& P0 @9 Y" w# o. b5 z
    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RHCLKRST_ON ) != GBLCTL_RHCLKRST_ON );
# ~' U8 u0 f* ~0 F& M, G$ k- }0 a0 O) N# I# S4 B, e
    mcasp->regs->XGBLCTL |= GBLCTL_XCLKRST_ON; ! V! K( r1 y- g* s) e
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XCLKRST_ON ) != GBLCTL_XCLKRST_ON );/ T- p) e5 ]8 _# U% m( Y0 F
    mcasp->regs->RGBLCTL |= GBLCTL_RCLKRST_ON;
$ M$ s1 y* L' G3 v) e" V    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RCLKRST_ON ) != GBLCTL_RCLKRST_ON );
0 Y" e- X& P$ _$ v4 U) W- G( c* ~7 e1 v) \% X; t6 y; y
    mcasp->regs->XSTAT = 0x0000ffff; & H" {' D: t5 a  j0 }
    mcasp->regs->RSTAT = 0x0000ffff; 2 \" t5 `) |+ t
% |( `: t# ]( j
    mcasp->regs->XGBLCTL |= GBLCTL_XSRCLR_ON;
* S$ K; i6 C  g- l2 e    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSRCLR_ON ) != GBLCTL_XSRCLR_ON );
8 L5 R$ o+ ?) V4 P" m) G6 n) M6 Q    mcasp->regs->RGBLCTL |= GBLCTL_RSRCLR_ON;
) r5 V! a$ w( W3 {' D# g# y8 y    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSRCLR_ON ) != GBLCTL_RSRCLR_ON );/ Q! Y) W* c1 O7 I9 {7 x& [% ?

3 w! y2 P5 r4 j# w, y2 I; a    /* Write a 0, so that no underrun occurs after releasing the state machine */+ [; u0 _3 E& \* J
    mcasp->regs->XBUF5 = 0;
  T" [* X3 X' ?& [* I    mcasp->regs->RBUF0 = 0;
% I& @( Y6 l: A6 j. W. y
. ^  _6 M8 s4 d0 {8 D* @+ f- O    mcasp->regs->XGBLCTL |= GBLCTL_XSMRST_ON; ( I$ N6 M& k) ~$ q/ M3 a2 U
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XSMRST_ON ) != GBLCTL_XSMRST_ON );
7 c0 M3 n/ R( Z7 T7 J0 c) X    mcasp->regs->RGBLCTL |= GBLCTL_RSMRST_ON;
2 V# O$ v# l- h4 H) J6 g    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RSMRST_ON ) != GBLCTL_RSMRST_ON );6 Y4 f* s1 N; W- d- c' |

' `, T- B) V5 z3 r8 \1 p, \    mcasp->regs->XGBLCTL |= GBLCTL_XFRST_ON;   T8 N' M; g' Y9 b( j& A4 I" H
    while ( ( mcasp->regs->XGBLCTL & GBLCTL_XFRST_ON ) != GBLCTL_XFRST_ON );- n! Z' Y- d# J. y3 k  B& C
    mcasp->regs->RGBLCTL |= GBLCTL_RFRST_ON;
6 d/ L- _# |% N# @( f+ I+ y/ {    while ( ( mcasp->regs->RGBLCTL & GBLCTL_RFRST_ON ) != GBLCTL_RFRST_ON );6 E0 b& q6 V7 |3 l7 D& B

3 i; X' ^; N- A    CSR = 0x0000;7 n) M7 N: Z+ ~, }4 ?% Q
    INTC_INTMUX1 = 0x3d;/ ]6 k, ]0 F: W1 @2 q' U. ?
    ISTP = (unsigned int)vectors;6 j, f8 N6 [, y0 k$ x$ x8 R
    ICR = 0xFFF0;  
1 C3 R! L. @$ b* H    IER |= 0x12;  : `1 D- ^* I% f/ ~
    CSR |= 0x01;  7 d7 R; o9 j, a7 C' h- d) n
2 I- v* Y8 B$ Q6 a2 f
8 ]# T3 d: x4 l& Q1 u$ o
8 U- c& ^# C( S+ \% ?" p+ S8 Y
还有就是两个输入输出函数:
9 \2 ^5 |/ U: W0 X/ w) dvoid output_sample(Int32 out_data)
! A$ [* Q+ W" @( A{. g  Q( ~8 S5 `: ]  n+ l- b
  AIC31_data.uint = out_data;  
1 k6 ~( P* f+ H0 r* f- }+ {  MCASP1_XBUF5_32BIT = AIC31_data.uint;/ k1 y0 V) m! B
}9 b: R5 `+ F, a
9 ]3 g: j6 v% z0 L4 r3 i
Int32 input_sample(void)
9 a; @$ z8 W- F+ u; i{  9 A: N2 \7 }, M# A: d5 w
  AIC31_data.uint = MCASP1_RBUF0_32BIT;
1 _; B8 ?) k& {- v6 @  return (AIC31_data.uint);3 [* u, k# G* x+ ?
}, E0 B  ^) v- Y% K. h* T

' A6 _0 ~' p8 @5 K& v" D& r2 S
分享到:  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-4-3 00:13 , Processed in 0.039052 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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